le remplacement de la disposition sur un QWidget avec un autre modèle

J'ai un widget qui change lorsque l'option est activée. Cela annule toutes les dispositions et les widgets. Je garde la liste de toutes les dispositions, afin que je puisse les supprimer à l'aide de quelque chose de semblable à cette réponse:

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.

Comment puis-je me débarrasser de l'ancien réseau et de l'ensemble de la nouvelle?


La documentation est assez laconique et apparemment pas directement applicable à python:

QWidget.setLayout (auto, QLayout)

La QLayout argument a est la propriété transférée à Qt.

Définit le layout manager pour ce widget à disposition.

Si il y a déjà un layout manager installé sur ce widget, QWidget
ne vous permettront pas d'en installer un autre. Vous devez d'abord supprimer l'existant
layout manager (retourné par la mise en page()) avant d'appeler setLayout()
avec la nouvelle mise en page.

Si la mise en page est à la disposition de la crèche sur un autre widget, setLayout() va
reparent la mise en page et d'en faire le layout manager pour ce widget.

Exemple:

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

Une alternative à l'appel de cette fonction est de passer ce widget à l'
mise en page du constructeur.

Le QWidget va prendre possession de mise en page.

Voir aussi layout() et la Mise en page de Gestion.

InformationsquelleAutor eudoxos | 2012-05-02