Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide:鼠标事件时可移动项的位置重置_Python_Python 2.7_User Interface_Mouseevent_Pyside - Fatal编程技术网

Python PySide:鼠标事件时可移动项的位置重置

Python PySide:鼠标事件时可移动项的位置重置,python,python-2.7,user-interface,mouseevent,pyside,Python,Python 2.7,User Interface,Mouseevent,Pyside,我对PySide有问题(我还是编程新手)。我创建了名为RBNode的自定义QGraphicsItem。它应该保持在发生mouseReleaseEvent的位置。我不知道为什么,但当我尝试多次移动RBNode类的实例时,该实例的位置会重置。我怎样才能避免重新设置位置? 提前感谢你的帮助 #!/usr/bin/python # -*- coding: utf-8 -*- import sys from PySide.QtGui import * from PySide.QtCore import

我对PySide有问题(我还是编程新手)。我创建了名为RBNode的自定义QGraphicsItem。它应该保持在发生mouseReleaseEvent的位置。我不知道为什么,但当我尝试多次移动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])

在调用超类的MousePresseEvent和mouseReleaseEvent时,您忘记了self作为参数

    QGraphicsItem.mousePressEvent(self, event)

    QGraphicsItem.mouseReleaseEvent(self, event)