2

でクリックしたときにマウスの座標を表示するためにマウスプレスイベントをリンクしようとしています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 の座標を表示するにはどうすればよいですか?

4

1 に答える 1

2

イベントフィルターがあなたが望むことをするかもしれないようです。

簡単なデモを次に示します。

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_())
于 2012-08-24T22:21:03.463 に答える