Matplotlib事件处理:它们何时发送matplotlib事件以及何时Qt事件

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

我正在尝试使用Pyside2将matplotlib嵌入Qt接口。我想使用“ imshow”来显示图像,我可以使用滚轮放大并单击。要连接滚轮和鼠标,我正在使用:

self.fig.canvas.mpl_connect('button_press_event', self.mouseClick)
self.fig.canvas.mpl_connect('scroll_event', self.wheelEvent)

如果我使用事件处理程序:

def wheelEvent(self, event):
    print(event)

def mouseClick(self, event):
    print(event)

[当我运行它,然后滚动并单击时,我得到的输出是:

button_press_event: xy=(94, 199) xydata=(99.99197230814553, 134.93602887023127) button=1 dblclick=False inaxes=AxesSubplot(0.125,0.290018;0.775x0.409964)
<PySide2.QtGui.QWheelEvent object at 0x7f92e3359a50>

所以,我的问题是,为什么在一种情况下我得到PySide事件,而在另一种情况下为什么要得到matplotlib button_press_event?我期望得到的是scroll_event

非常感谢!

python matplotlib pyside2
1个回答
2
投票

说明:

wheelEvent是QWidget类的方法,当窗口通过QWheelEvent获得焦点时,每次与车轮交互时都会得到通知,因此从其继承的类也将拥有它,在这种情况下,它们将覆盖该方法并且您还将其连接到scroll_event事件,因此打印QWheelEvent(在我的Linux上是PySide2 5.14,我会交替收到QWheelEvent和scroll_event)。

解决方案:

不要使用wheelEvent方法,而要使用另一个具有其他名称的方法:

self.fig.canvas.mpl_connect('button_press_event', self.mouseClick)
self.fig.canvas.mpl_connect('scroll_event', self.mouseWheel)
def mouseWheel(self, event):
    print(event)

def mouseClick(self, event):
    print(event)
© www.soinside.com 2019 - 2024. All rights reserved.