web-dev-qa-db-fra.com

pyqt: comment supprimer un widget?

J'ai un widget QGroupBox avec des enfants que je veux supprimer. Comment je fais ça? Je ne trouve aucun removeWidget, removeChild, removeItem, ou quelque chose de similaire dans la documentation . Je ne peux que voir comment supprimer des éléments d'une mise en page, mais cela, apparemment, ne le supprime pas du widget réel.

34
Claudiu

Eh bien, cela fonctionne: sur le widget que je veux supprimer, appelez widget.setParent(None). J'aime la façon dont l'ajout à une mise en page ajoute un widget au conteneur, mais la suppression d'une mise en page n'est pas ... amusante.

27
Claudiu

Si votre widget n'a pas de widgets enfants qui en dépendent, je pense que vous pouvez utiliser:

layout.removeWidget(self.widget_name)
self.widget_name.deleteLater()
self.widget_name = None

dans mes tests quand c'est un widget qui a des enfants il faut:

import sip
layout.removeWidget(self.widget_name)
sip.delete(self.widget_name)
self.widget_name = None

si vous n'avez pas de nom de variable pour le widget au niveau de la classe ou global, vous pouvez toujours le supprimer de la mise en page avec layout.takeAt (index) et obtenir le pointeur du widget de la QLayoutItem, cette fonction retourne avec la méthode QLayoutItem.widget (), dans dans ce cas, vous n'avez pas besoin d'attribuer à None le nom de la variable car il n'est pas référencé en dehors de votre fonction.

Essayez les deux méthodes et voyez ce qui fonctionne pour vous (ne perdez pas de mémoire après avoir répété plusieurs fois).

41
skuda