pyqt: ¿cómo eliminar un widget?

Tengo un widget de QGroupBox con hijos que quiero eliminar. ¿Cómo puedo hacer eso? No puedo encontrar ningún removeWidget , removeChild , removeItem o algo similar en los documentos . Solo puedo ver cómo eliminar elementos de un diseño, pero eso, aparentemente, no lo elimina del widget real.

Si su widget no tiene widgets secundarios que dependan de él, creo que puede usar:

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

en mis pruebas, cuando es un widget que tiene hijos, debes:

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

Si no tiene un nombre de variable para el widget a nivel de clase o global, aún puede eliminar de layout con layout.takeAt (índice) y obtener el puntero del widget de QLayoutItem. Esta función regresa con el método QLayoutItem.widget () en ese caso, no necesita asignar a Ninguno el nombre de la variable porque no se hace referencia fuera de su función.

Pruebe ambos métodos y vea qué funciona para usted (no pierda memoria después de repetir un buen montón de veces).

Bueno, esto funciona: en el widget que quiero eliminar, llame a widget.setParent(None) . Me gusta cómo agregar a un diseño agrega un widget al contenedor, pero eliminar de un diseño no es … cosas divertidas.

¿Estás seguro de que quieres eliminar el widget? ¿No te hide ? En mi humilde opinión, el método aceptado es show / hide para hacer que los widgets aparezcan y desaparezcan de la vista del usuario.

Una alternativa es usar QStackedWidget