我正在使用PySide。在QMainWindow
内,我在ImageItem
内显示了PlotWidget
。
假设我有一个可以动态生成图像的函数generateImage(r, np)
。对于位于np
方块内的图像(实际坐标),该函数返回np
x (-r, -r)-(r, r)
像素数组。我希望轴显示真实坐标,而不是像素坐标。
我的代码实际上是这样的:
graph = PlotWidget()
image = ImageItem()
graph.addItem(image)
graph.setAspectLocked(True) # to keep the pixels square
r = 10e-6 # 10 µm
np = 101 # but should be related to number of pixels in the window
image.setImage(generateImage(r, np))
image.setRect(QRectF(-r, -r, 2*r, 2*r))
我的猜测是使用sigRangeChanged
信号来检测视图中的更改。但是,我不确定如何检测窗口的大小和分辨率,以及如何正确更新图像。
我天真地试图做这样的事情:
graph.sigRangeChanged.connect(updateRange)
def updateRange(view, rng):
r = max(abs(rng[0][0]), abs(rng[0][1]),
abs(rng[1][0]), abs(rng[1][1]))
image.setImage(generateImage(r, np))
image.setRect(QRectF(-r, -r, 2*r, 2*r))
但是,它不起作用,因为信号返回的范围略大于r
本身。因此,我看到图像变得越来越小......
setImage()
之前是否需要对数组进行切片,还是可以给出整个数组并让pyqtgraph只显示我需要的区域?graph.viewRect()
,image.viewRect()
,image.boundingRect()
,image.sceneBoundingRect()
,......)