我正在尝试将鼠标按下事件链接到在QLabel
中单击时显示鼠标的坐标。一些问题......当我传递通用QWidget.mousePressEvent
时,坐标只会在第一次点击时显示。当我尝试使鼠标事件特定于GraphicsScene(self.p1)
时,我收到以下错误:
Traceback (most recent call last):
File "C:\Users\Tory\Desktop\DIDSONGUIDONOTCHANGE.py", line 59, in mousePressEvent
self.p1.mousePressEvent(event)
TypeError: QGraphicsWidget.mousePressEvent(QGraphicsSceneMouseEvent): argument 1 has unexpected type 'QMouseEvent'
这是我正在使用的代码......我知道它已关闭,但我是新手,有点迷失在哪里开始。
def mousePressEvent(self, event):
self.p1.mousePressEvent(event)
x=event.x()
y=event.y()
if event.button()==Qt.LeftButton:
self.label.setText("x=%0.01f,y=%0.01f" %(x,y))
如何单击鼠标以显示图形场景self.p1的坐标?
答案 0 :(得分:2)
看起来event filter可能会做你想要的。
这是一个简单的演示:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.scene = QtGui.QGraphicsScene(self)
self.scene.addPixmap(QtGui.QPixmap('image.jpg'))
self.scene.installEventFilter(self)
self.view = QtGui.QGraphicsView(self)
self.view.setScene(self.scene)
self.label = QtGui.QLabel(self)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.view)
layout.addWidget(self.label)
def eventFilter(self, source, event):
if (source is self.scene and
event.type() == QtCore.QEvent.GraphicsSceneMouseRelease and
event.button() == QtCore.Qt.LeftButton):
pos = event.scenePos()
self.label.setText('x=%0.01f,y=%0.01f' % (pos.x(), pos.y()))
return QtGui.QWidget.eventFilter(self, source, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())