第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

PyQt5 : 已刪除已包裝的 c/c++ 對象

PyQt5 : 已刪除已包裝的 c/c++ 對象

拉丁的傳說 2022-08-02 18:35:58
我正在嘗試創(chuàng)建自己的圖形項(xiàng)目,其中心有一個(gè)圓圈及其標(biāo)簽。class circle(QGraphicsItem):    def __init__(self, radius=None, name=None, x=None, y=None, parent=None):        super(circle, self).__init__(parent)        self.radius = radius if radius else random.random()*500        self.label = name if name else "cirA"        self.x = x if x else random.randint(0, 900)        self.y = y if y else random.randint(0, 600)        # self.center = complex(self.x, self.y)    def boundingRect(self):        penWidth = 1.0        return QRectF(-self.x - penWidth / 2, -self.y - penWidth / 2,                      self.x + penWidth, self.y + penWidth)    def paint(self, painter, option, widget):        painter.drawEllipse(0, 0, self.radius, self.radius)        painter.drawText(self.label)現(xiàn)在在我的主GUI中,一個(gè)圓圈列表被保存為circleList,我正在嘗試將圓圈項(xiàng)目添加為for cir in self.circleList:            self.painter.addItem(cir)但這會返回RuntimeError: wrapped C/C++ object of type circle has been deleted幫助?這應(yīng)該可以完成最小可復(fù)制示例的技巧注意:FBS是必需的,項(xiàng)目應(yīng)使用fbs startproject該圓圈也將與以下內(nèi)容一起添加from fbs_runtime.application_context.PyQt5 import ApplicationContextfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *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()        mainLayout.addWidget(self.canvas, 0, 0, 6, 2)        self.setLayout(mainLayout)        self.circleList = []    def drawCircle(self):        pen = QPen(Qt.black, 2, Qt.SolidLine)        self.painter.clear()        for cir in self.circleList:            self.painter.addItem(cir)        self.painter.update()        self.canvas.update()        self.update()    def newCircle(self, cir):        self.circleList.append(cir)        self.drawCircle()    def addCircle(self):        return self.newCircle(circle())
查看完整描述

1 回答

?
開滿天機(jī)

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())


查看完整回答
反對 回復(fù) 2022-08-02
  • 1 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號