【问题标题】:Keep coordinate not changing for Mouse Click Event on plotWidget (pyqtgraph) after image zoom in/out图像放大/缩小后,plotWidget(pyqtgraph)上的鼠标单击事件保持坐标不变
【发布时间】:2020-08-04 19:50:49
【问题描述】:
我正在使用 PyQt5 设计用于图像分析的 GUI。图像窗口是使用 plotWidget 设计的,因此用户可以使用鼠标放大/缩小显示的图像。
问题描述:当用户点击某个位置时,软件有鼠标点击事件,并回调鼠标在图片上的(x,y)坐标。然而,图像放大/缩小后,同一点击点的坐标回调并没有改变。 (我希望坐标应该随着图像放大/缩小而改变,而不是相对于 GUI 窗口的绝对位置)。
有没有办法做到这一点?
【问题讨论】:
标签:
python
pyqt5
mouseevent
pyqtgraph
【解决方案1】:
Qt 以像素为单位报告鼠标相对于接收鼠标事件的小部件的位置。您需要将鼠标位置映射到图像的坐标系。 Pyqtgraph 的图像分析示例展示了一种方法——如果你直接从 ImageItem 获取事件,它已经为你映射了:
https://github.com/pyqtgraph/pyqtgraph/blob/develop/examples/imageAnalysis.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()