Pyside:在鼠标事件中重置可移动项目的位置



我对pyside有问题(我仍然是编程中的新秀)。我创建了称为rbnode的自定义QGraphicSitem。它应该留在慕斯eleaseevent发生的位置。我不知道为什么,但是当我尝试多次移动rbnode类的实例时,该实例的位置重置。如何避免重置位置?预先感谢您的帮助。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class RBNode(QGraphicsItem):
    def __init__(self, factorView = None):
        super(RBNode, self).__init__()
        self.factor = factorView
        self.pressed = False
        self.x = self.pos().x()
        self.y = self.pos().y()
        self.setFlag(QGraphicsItem.ItemIsMovable)
    def boundingRect(self):
        return QRectF(-50,-50,100,100)
    def paint(self, painter, option, widget):
        rect = QRectF(-50,-50,100,100)
        if self.pressed:
            painter.setBrush(Qt.red)
        else:
            painter.setBrush(Qt.darkGray)
        painter.drawEllipse(rect)
    def mousePressEvent(self, event):
        self.pressed = True
        self.update()
        QGraphicsItem.mousePressEvent(event)
    def mouseReleaseEvent(self, event):
        self.pressed = False
        self.update()
        QGraphicsItem.mouseReleaseEvent(event)

class RBGraphicView(QGraphicsView):
    def __init__(self):
        super(RBGraphicView, self).__init__()
        self.factorView = 1
        self.initScene()
        self.initGui()
    def initGui(self):
        self.setWindowTitle("A Simple Animation")
        self.show()
    def initScene(self):
        self.rbScene = QGraphicsScene(self)
        self.rbAddItem(self.rbScene)
        self.setScene(self.rbScene)
    def rbAddItem(self, scene):
        rbNode1 = RBNode(self.factorView)
        rbNode1.setPos(100,100)
        scene.addItem(rbNode1)

if __name__ == '__main__':
    try:
        myApp = QApplication(sys.argv)
        myView = RBGraphicView()
        myApp.exec_()
        sys.exit(0)
    except NameError:
        print("Name Error:", sys.exc_info()[1])
    except SystemExit:
        print("Closing Window...")
    except Exception:
        print(sys.exc_info()[1])

您忘记了自我作为对Mousepressevent的参数,超级类的Mouserelealeaseevent。

    QGraphicsItem.mousePressEvent(self, event)
    QGraphicsItem.mouseReleaseEvent(self, event)

最新更新