Question

J'ai un QFrame avec un QVBoxLayout et j'ajouter mes propres widgets personnalisés à la mise en page pour simuler un QListWidget mais avec plus d'informations / fonctionnalité dans les articles. Ajouter le widget à la mise en page et de conserver une référence dans une variable membre (ce qui est Python):

 self.sv_widgets[purchase.id] = widget                
 self.vl_seatView.addWidget(widget)

Puis, quand je suis fait avec un article que je veux retirer de l'écran et nettoyer la référence:

self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
del self.sv_widgets[purchase.id]

Malheureusement, le widget est toujours affiché à l'écran! J'ai vérifié et je ne l'ajouter à la disposition une fois (et en fait une seule copie est affichée), essayé d'appeler manuellement la mise à jour () sur la mise en page, mais en vain. Quelle est la bonne façon de le faire?

Était-ce utile?

La solution

Vous pouvez faire ceci:

import sip # you'll need this import (no worries, it ships with your pyqt install)
sip.delete(self.sv_widgets[purchase.id])

sip.delete(obj) explicitement appelle le destructeur de l'objet C ++ correspondant. removeWidget ne provoque pas ce destructor à appeler (il encore a une mère à ce moment) et del marque seulement l'objet python pour la collecte des ordures.

Vous pouvez obtenir le même en faisant (propably plus propre):

self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
self.sv_widgets[purchase.id].setParent(None)
del self.sv_widgets[purchase.id]

Autres conseils

Vous pouvez également utiliser self.sv_widgets [purchase.id] .deleteLater ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top