gpt4 book ai didi

python - Matplotlib 事件处理 : when do they send matplotlib events and when Qt events

转载 作者:行者123 更新时间:2023-12-04 10:49:19 25 4
gpt4 key购买 nike

我正在尝试使用 Pyside2 在 Qt 界面中嵌入 matplotlib。我想使用“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 .

非常感谢!

最佳答案

解释:

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)

关于python - Matplotlib 事件处理 : when do they send matplotlib events and when Qt events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com