我正在使用PySide.在里面QMainWindow,我有一个ImageItem显示在里面PlotWidget.
假设我有一个generateImage(r, np)可以动态生成图像的功能.该函数为位于正方形内的图像(实际坐标)返回npx np像素数组(-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))
Run Code Online (Sandbox Code Playgroud)
我的猜测是使用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))
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,因为信号返回的范围略大于r自身.因此,我看到图像变得越来越小......
setImage(),或者我可以给出整个数组并让pyqtgraph只显示我需要的区域吗?graph.viewRect(),image.viewRect(),image.boundingRect(),image.sceneBoundingRect(),...)