图像放大后,在 plotWidget (pyqtgraph) 上的鼠标点击事件保持坐标不变。

问题描述 投票:0回答:1

我使用PyQt5来设计图像分析的GUI.图像窗口是使用plotWidget设计的,因此用户可以使用鼠标放大显示的图像。问题描述说明:当用户点击一个位置时,软件有鼠标点击事件,回调鼠标在图像上的(x,y)坐标,但图像放大后,同一点击点的坐标回调没有变化。但是当图像放大后,同一点击点的坐标回调没有变化。我希望坐标应该随着图像的放大缩小而改变,而不是相对于GUI窗口的绝对位置)。

有什么方法可以实现吗?

python pyqt5 mouseevent pyqtgraph
1个回答
0
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.