PyQt5 事件过滤器对象检测



每当我单击QGraphicsView小部件中的点时,我都会报告鼠标位置。

class App(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(App, self).__init__(parent)
self.setupUi(self)
self.graphicsView.viewport().installEventFilter(self)
self.graphicsView_2.viewport().installEventFilter(self)
def eventFilter(self, a0: 'QObject', a1: 'QEvent') -> bool:
if a0 == self.graphicsView:
if a1.type() == QtCore.QEvent.MouseButtonPress:
mousePosition = a1.pos()
print(mousePosition.x(), 261 - mousePosition.y())
return True
return False
elif a0 == self.graphicsView_2:
if a1.type() == QtCore.QEvent.MouseButtonPress:
mousePosition = a1.pos()
print(mousePosition.x(), 261 - mousePosition.y())
return True
return False
return False

我只希望它在我按下我列出的两个QGraphicsView小部件之一时报告鼠标按钮。但是,使用此当前代码,在任何时候都不会触发任何内容。我认为a0永远不会等于我想与之进行比较的QGraphicsView小部件,所以我不确定如何在我想要它时制作这个触发器。

QGraphicsView继承自QAbstractScrollArea,因此您单击的小部件不是QGraphicsView,而是在其viewport()中。这似乎是可以理解的,因为您在viewport()中安装了事件过滤器,因此"a0"永远不会是QGraphicsView而是它的viewport()。此外,当您比较对象时,最好使用"is"。

考虑到上述情况,解决方案是:

if a0isself.graphicsView.viewport():

if a0isself.graphicsView_2.viewport():

最新更新