1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
圖形視圖框架不需要您刪除和添加項(xiàng)目。在你的例子中,當(dāng)使用 clear() 時(shí),你正在從場景中刪除項(xiàng)目,并且你正在從內(nèi)存中刪除它們,所以 circleList 將具有不再分配內(nèi)存的變量。
另一方面,如果你想要一個(gè)自定義的QGraphicsItem,在中心繪制一個(gè)圓圈和一個(gè)文本,那么 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())
添加回答
舉報(bào)