Monkey patching QWidget MousePresseEvent未触发QPushButton cli

2024-10-01 15:35:08 发布

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

我想检测一下什么时候鼠标点击了任何一个QWidget,所以我试着用monkey修补mousePressEvent,如下所示:

qwidgetmousepressevent = QtWidgets.QWidget.mousePressEvent
def overwriteQWidgetMousePressEvent(self, event):
    print("mouse press!")
    qwidgetmousepressevent(self, event)
QtWidgets.QWidget.mousePressEvent = overwriteQWidgetMousePressEvent

它本身工作得很好,但是无法触发QPushButton小部件的点击信号。我想我的问题是,程序的行为发生变化的原因是什么?据我所知,我保留了相同的签名并调用了相同的代码,但有一些东西会产生副作用,我不知道是什么。在


Tags: selfevent部件def鼠标monkeypressprint
1条回答
网友
1楼 · 发布于 2024-10-01 15:35:08

QPushButton类继承QAbstractButton,后者又继承{}。如果对QWidget类进行monkey修补,则会覆盖应用程序中每个小部件的mousePressEvent。你真的想这么做吗?在

未发出clicked信号的原因是mousePressEvent是由QAbstractButton重新实现的,但您的代码从未显式调用它。因此,简单的修复方法是monkey补丁QAbstractButton或{}类,而不是QWidget。在

我不知道为什么重写QWidget.mousePressEvent会绕过PyQt中的子类实现。我想Python的重新实现总是优先于Qt实现,尽管这可能意味着事情似乎被称为“无序”(即,就逻辑继承链而言)。在

相关问题 更多 >

    热门问题