如何在QGraphicsItemGroup中获取可移动的图形项?

时间:2018-01-28 15:22:53

标签: python qt pyqt

我的目标是编写一个软件,显示两个位于同一QGraphicsItemGroup内的可移动磁盘。我想使用QGraphicsItemGroup因为这样每个磁盘都可以访问另一个磁盘的位置。为了使对象可以移动,我使用标记ItemIsMovable,遗憾的是它似乎不能在QGraphicsItemGroup内部工作。以下程序举例说明了我的问题:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsItem,\ 
    QApplication, QGraphicsItemGroup, QGraphicsEllipseItem


class MyDisk(QGraphicsEllipseItem):
    def __init__(self, top_left_x, top_left_y, radius, color):
        super().__init__(top_left_x, top_left_y, radius, radius)
        self.setBrush(color)
        self.setFlag(QGraphicsItem.ItemIsMovable)


class MyGroup(QGraphicsItemGroup):
    def __init__(self):
        super().__init__()
        self.disk1 = MyDisk(50, 50, 20, Qt.red)
        self.disk2 = MyDisk(150, 150, 20, Qt.red)
        self.addToGroup(self.disk1)
        self.addToGroup(self.disk2)
        # self.setFlag(QGraphicsItemGroup.ItemIsMovable)


class MyView(QGraphicsView):
    def __init__(self):
        super().__init__()
        self.scene = QGraphicsScene()
        self.setScene(self.scene)
        self.setWindowTitle('Red disks are not movable')
        self.setSceneRect(0, 0, 250, 250)
        self.group = MyGroup()
        self.scene.addItem(self.group)
        self.scene.addItem(MyDisk(150, 50, 20, Qt.green))


if __name__ == '__main__':
    app = QApplication([])
    f = MyView()
    f.show()
    sys.exit(app.exec_())

我的问题是绿色磁盘(不在组中)是可移动的,但是两个红色磁盘(在组中)不是。如何让两个红色磁盘移动?请注意,在ItemIsMovable内设置标记MyGroup并不能解决问题,因为红色磁盘会一起移动(您可以通过取消注释代码中的注释来尝试此操作)。

0 个答案:

没有答案