Quelle est la manière «correcte» ou idiomatique de nettoyer/supprimer des widgets lors de l'utilisation de PyQt4?Une bonne façon de nettoyer les widgets en pyqt
Consultez le code suivant:
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
Le code ci-dessus utilise setParent()
, deleteLater()
et réglage de l'objet à None
. Sont-ils tous nécessaires?
Un autre scénario possible est que j'ai un dialogue avec un tas de widgets et que je veux supprimer ces widgets et en ajouter de nouveaux. Je ne veux pas 'laisser échapper' les vieux widgets, mais je ne suis pas sûr de la façon correcte de faire quelque chose comme ça. Il me semble que deleteLater()
pourrait ne jamais être nécessaire. Est-ce que cela décrémente simplement le nombre de références? Si oui, est-ce que le fait de mettre la variable à None ne ferait pas la même chose?
Est-il nécessaire d'utiliser l'argument 'parent' lors de la création de tous les objets qui seront ajoutés à une mise en page? Je réalise que c'est probablement un peu plus explicite, mais est-ce nécessaire? –
Non, pas vraiment. Si vous les ajoutez directement à la mise en page, la disposition les rendra enfants du propriétaire de la mise en page. – jdi
Très en retard à la fête, mais je pensais que j'ajouterais - bien que ce ne soit pas _necessary_ d'utiliser l'argument 'parent' - c'est probablement une bonne idée, car cela contraint un peu la structure de votre code pour voir quelle est la hiérarchie de confinement prévue. – Emmet