每当我单击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():