Reemplazo de diseño en un QWidget con otro diseño

Tengo un widget que cambia cuando se alterna una opción. Esto invalida todos los diseños y widgets. Mantengo una lista de todos los diseños, por lo que puedo eliminarlos usando algo similar aesta respuesta:

<code>class MyWidget(QFrame):
   # ...
   def reLayout(self):
      def deleteLayoutChilds(l):
         while l.count():
            item=l.takeAt(0)
            widget=item.widget()
            if widget: widget.deleteLater()
            else: deleteLayoutChilds(item.layout())
      for l in self.allLayouts: deleteLayoutChilds(l)

      # now install the new layout
      ##
      ## how to delete the old layout first?
      l=self.layout(); del l # no effect
      #
      layout=QGridLayout(self)
      ## warning: QLayout: Attempting to add QLayout "" to MyWidget "", which already has a layout.
</code>

¿Cómo puedo deshacerme del diseño antiguo y establecer el nuevo?

La documentacion esbastante escueto y al parecer no directamente aplicable a python:

QWidget.setLayout (self, QLayout)

El argumento QLayout tiene su propiedad transferida a Qt.

Establece el administrador de diseño para este widget en el diseño.

Si ya hay un administrador de diseño instalado en este widget, QWidget no le permitirá instalar otro. Primero debe eliminar el administrador de diseño existente (devuelto por layout ()) antes de poder llamar a setLayout () con el nuevo diseño.

Si layout es el gestor de layout en un widget diferente, setLayout () reparará el layout y lo convertirá en el gestor de layout para este widget.

Ejemplo:

<code> QVBoxLayout *layout = new QVBoxLayout;
 layout->addWidget(formWidget);
 setLayout(layout);
</code>

Una alternativa a llamar a esta función es pasar este widget al constructor del diseño.

El QWidget tomará posesión del diseño.

Vea también layout () y Layout Management.

Respuestas a la pregunta(1)

Su respuesta a la pregunta