如何挂钩 QGraphicsView 中的鼠标点击?
How to hook on mouseclick in a QGraphicsView?
我对 PyQt 有点陌生。我有一个 python PyQt5 代码,带有一个由设计器创建的简单对话框 window,在对话框中我有一个 QGraphicsView。在此视图中,QGraphicsScene 中只有一张图像。
现在我想 运行 当用户在图像上单击鼠标时的代码,但我不知道该怎么做。
class Ui_Dialog(object):
def setupUi(self, Dialog):
...
self.gv_1_H = QtWidgets.QGraphicsView(self.verticalLayoutWidget_2)
...
scene = QtWidgets.QGraphicsScene()
pixmap = QtGui.QPixmap("ui/d0.png")
scene.addPixmap(pixmap)
self.gv_1_H.setScene(scene)
self.gv_1_H.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents )
...
网上找了一个小时也没找到提示...
有什么提示吗?
谢谢
Qt 小部件的鼠标事件是受保护的函数,您需要将要对其作出反应的小部件子类化并覆盖这些函数。
为了避免子类化,您可以选择安装一个 eventFilter 来对它们做出反应,但我不建议在这种情况下使用它。
class MyScene(QtWidgets.QGraphicsScene):
def __init__(self):
super(MyScene, self).__init__()
self.pixmapItem = self.addPixmap(QtGui.QPixmap("ui/d0.png"))
def mousePressEvent(self, event):
if event.scenePos() in self.pixmapItem.sceneBoundingRect():
print('image clicked!')
else:
super(MyScene, self).mousePressEvent(event)
class Ui_Dialog(object):
def setupUi(self, Dialog):
# ...
scene = MyScene()
self.gv_1_H.setScene(scene)
我对 PyQt 有点陌生。我有一个 python PyQt5 代码,带有一个由设计器创建的简单对话框 window,在对话框中我有一个 QGraphicsView。在此视图中,QGraphicsScene 中只有一张图像。
现在我想 运行 当用户在图像上单击鼠标时的代码,但我不知道该怎么做。
class Ui_Dialog(object):
def setupUi(self, Dialog):
...
self.gv_1_H = QtWidgets.QGraphicsView(self.verticalLayoutWidget_2)
...
scene = QtWidgets.QGraphicsScene()
pixmap = QtGui.QPixmap("ui/d0.png")
scene.addPixmap(pixmap)
self.gv_1_H.setScene(scene)
self.gv_1_H.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents )
...
网上找了一个小时也没找到提示...
有什么提示吗? 谢谢
Qt 小部件的鼠标事件是受保护的函数,您需要将要对其作出反应的小部件子类化并覆盖这些函数。
为了避免子类化,您可以选择安装一个 eventFilter 来对它们做出反应,但我不建议在这种情况下使用它。
class MyScene(QtWidgets.QGraphicsScene):
def __init__(self):
super(MyScene, self).__init__()
self.pixmapItem = self.addPixmap(QtGui.QPixmap("ui/d0.png"))
def mousePressEvent(self, event):
if event.scenePos() in self.pixmapItem.sceneBoundingRect():
print('image clicked!')
else:
super(MyScene, self).mousePressEvent(event)
class Ui_Dialog(object):
def setupUi(self, Dialog):
# ...
scene = MyScene()
self.gv_1_H.setScene(scene)