Matplotlib事件处理:何时发送Matplotlib事件,何时发送Qt事件

2024-09-28 22:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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事件,而在另一种情况下得到一个matplotlibbutton_press_event?我所期望的是得到一个scroll_event

非常感谢


Tags: selfeventdefconnectfig事件buttonmpl
1条回答
网友
1楼 · 发布于 2024-09-28 22:30:23

说明:

wheelEvent是QWidget类的一种方法,当窗口通过QWheelEvent具有焦点时,每次与控制盘交互时都会收到通知,因此从它继承的类也将具有它,在本例中,它们覆盖了该方法,并且您还将其连接到scroll_事件,因此打印QWheelEvent(在我使用Linux上的PySide2 5.14时,我交替接收QWheelEvent和scroll_事件)

解决方案:

不要使用wheelEvent方法,而是使用另一个名称的方法:

^{pr1}$

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

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

相关问题 更多 >