[我想在单击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
继承自QGraphicsView
,因此您单击的小部件不是QAbstractScrollArea
,而是在其QAbstractScrollArea
中。这似乎是可以理解的,因为您在QGraphicsView
中安装了事件过滤器,因此“ a0”将永远不是QGraphicsView
,而是其viewport()
。同样,在比较对象时,最好使用“ is”。
考虑到上述,解决方法是:
viewport()
viewport()