Was ist der 'richtige' oder idiomatische Weg, Widgets zu bereinigen/zu löschen, wenn PyQt4 verwendet wird?Richtiger Weg, um Widgets in pyqt zu bereinigen
Betrachten Sie den folgenden Code ein:
choices = ['a', 'b', 'c']
checkboxes = []
layout = QtGui.QVBoxLayout()
dialog = MyDialog()
for c in choices:
checkboxes.append(QtGui.QCheckBox(c)
layout.addWidget(chkbox)
dialog.setLayout(layout)
for c in checkboxes:
c.setParent(None)
c.deleteLater()
c = None
Der obige Code verwendet setParent()
, deleteLater()
und Einstellen des Objekts None
. Sind all diese Dinge notwendig?
Ein anderes mögliches Szenario ist, ich habe einen Dialog mit einer Reihe von Widgets darauf und möchte diese Widgets entfernen und neue hinzufügen. Ich möchte die alten Widgets nicht "auslecken", aber ich bin mir nicht sicher, was der richtige Weg wäre, um so etwas zu tun.
Es scheint mir, dass deleteLater()
möglicherweise nie benötigt wird. Verringert es nur die Referenzzählung? Wenn ja, würde nicht nur die Variable auf "None" setzen?
Ist es notwendig, das Argument 'parent' beim Erstellen aller Objekte zu verwenden, die einem Layout hinzugefügt werden? Ich weiß, das ist wahrscheinlich ein bisschen expliziter, aber ist es erforderlich? –
Nein, nicht wirklich. Wenn Sie sie direkt zum Layout hinzufügen, werden sie durch das Layout zum Eigentümer des Layouts. – jdi
Sehr spät zur Party, aber ich dachte, ich würde hinzufügen, dass - obwohl es nicht notwendig ist, das Argument "Eltern" zu verwenden - es ist wahrscheinlich eine gute Idee, da es die Struktur Ihres Codes ein wenig einschränkt, und es für andere einfacher macht um zu sehen, was die beabsichtigte Eindämmungshierarchie ist. – Emmet