我使用PyQt5来设计图像分析的GUI.图像窗口是使用plotWidget设计的,因此用户可以使用鼠标放大显示的图像。问题描述说明:当用户点击一个位置时,软件有鼠标点击事件,回调鼠标在图像上的(x,y)坐标,但图像放大后,同一点击点的坐标回调没有变化。但是当图像放大后,同一点击点的坐标回调没有变化。我希望坐标应该随着图像的放大缩小而改变,而不是相对于GUI窗口的绝对位置)。
有什么方法可以实现吗?
Qt报告了鼠标相对于接收鼠标事件的widget的像素位置。你需要 地图 鼠标位置到图像的坐标系。Pyqtgraph的图像分析示例展示了一种方法--如果你直接从ImageItem中获取事件,它已经为你映射了。
https:/github.comyqtgraphpyqtgraphblobdevelopexamplesimageAnalysis.py#L97。
另一种选择是自己动手绘制。
import pyqtgraph as pg
import numpy as np
class PW(pg.PlotWidget):
def __init__(self):
pg.PlotWidget.__init__(self)
self.img = pg.ImageItem(np.random.normal(size=(100, 100)))
self.addItem(self.img)
def mouseMoveEvent(self, ev):
scene_pos = self.mapToScene(ev.pos())
img_pos = self.img.mapFromScene(scene_pos)
print(img_pos)
return pg.PlotWidget.mouseMoveEvent(self, ev)
pg.mkQApp()
pw = PW()
pw.show()