1 回答
TA贡献1786条经验 获得超13个赞
图形视图框架不需要您删除和添加项目。在你的例子中,当使用 clear() 时,你正在从场景中删除项目,并且你正在从内存中删除它们,所以 circleList 将具有不再分配内存的变量。
另一方面,如果你想要一个自定义的QGraphicsItem,在中心绘制一个圆圈和一个文本,那么 boundingRect必须具有矩形的大小。
考虑到上述情况,解决方案如下:
class Circle(QGraphicsItem):
def __init__(self, radius=None, name="", x=0, y=0, parent=None):
super(Circle, self).__init__(parent)
self.radius = radius or random.random() * 500
self.label = name if name else "cirA"
self.setPos(x or random.randint(0, 900), y or random.randint(0, 900))
def boundingRect(self):
return QRectF(0, 0, self.radius, self.radius)
def paint(self, painter, option, widget):
painter.drawEllipse(0, 0, self.radius, self.radius)
painter.drawText(0, 0, self.radius, self.radius, Qt.AlignCenter, self.label)
class Gui(QDialog):
def __init__(self, parent=None):
super(Gui, self).__init__(parent)
self.painter = QGraphicsScene(10, 10, 900, 600)
self.canvas = QGraphicsView(self.painter)
mainLayout = QGridLayout(self)
mainLayout.addWidget(self.canvas)
@property
def circleList(self):
return [item for item in self.painter.items() if isinstance(item, Circle)]
def newCircle(self, cir):
self.painter.addItem(cir)
return cir
def addCircle(self):
return self.newCircle(Circle())
添加回答
举报