【问题标题】: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()

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多