PyQt:可移动QGraphicsItem位置开始偏移

时间:2020-06-26 03:10:36

标签: python pyqt pyqt5 qgraphicsscene qgraphicsitem

所以这是我的问题。我有一个带有多个 QGraphicsItem QGraphicsScene ,它们都具有标志 QtWidgets.QGraphicsItem.ItemIsMovable 。移动它们的效果很好,除非发生某些动作会中断( QGraphicsItem )MouseEvent,例如,从场景中删除/删除该项目,同时拖动该项目。下一个单击/移动的项目的位置变为偏移,使其看起来就像刚刚被传送一样。在调用MouseMoveEvent之后立即发生。在移除项目的情况下,它会跳到场景中的0,0位置。导致项目偏移的操作的另一个示例是,用鼠标右键打开上下文菜单,同时仍然用鼠标左键拖动它。我认为这是同一个问题,尽管在这种情况下,它似乎仅在打开上下文菜单时被鼠标移动的距离抵消了。

这是一个与我的项目相似的示例。要重现该错误,请按照下列步骤操作:

步骤1-首先移动两个节点

第2步-开始移动节点,但在释放鼠标按钮之前将其删除

第3步-拖动其余节点,您将看到它变为偏移量

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import random


class CustomScene (QtWidgets.QGraphicsScene):

    def __init__(self, x, y, width, height):
        super().__init__( x, y, width, height)

        self.width = width
        self.height = height

        self.addNode()
        self.addNode()
        

    def addNode (self):
        node = QtWidgets.QGraphicsRectItem(random.random() * self.width,random.random() * self.height,100,100)
        node.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True)
        node.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
        node.setZValue(10)
        node.setBrush(QtCore.Qt.red)

        self.addItem(node)


class NodeWindow (QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QWidget.__init__(self)

        self.centralWidget = QtWidgets.QWidget(self)
  
        self.setMinimumSize(1000, 500)
        self.scene = CustomScene(0, 0, 700, 400)

        self.view = QtWidgets.QGraphicsView(self.centralWidget)
        self.view.setScene(self.scene)
 
        self.setCentralWidget(self.centralWidget)
        self.show()

    def keyPressEvent (self, event):
        if event.key() == QtCore.Qt.Key_Delete:

            for node in self.scene.selectedItems():
                self.scene.removeItem(node)

0 个答案:

没有答案