我的目标是编写一个软件,显示两个位于同一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
并不能解决问题,因为红色磁盘会一起移动(您可以通过取消注释代码中的注释来尝试此操作)。