zastępując układ na QWidget innym układem

Mam widżet, który zmienia się po przełączeniu opcji. To unieważnia wszystkie układy i widżety. Przechowuję listę wszystkich układów, więc mogę je usunąć za pomocą czegoś podobnego dota odpowiedź:

<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>

Jak mogę pozbyć się starego układu i ustawić nowy?

Dokumentacja jestdość zwięzły i najwyraźniej nie dotyczy bezpośrednio Pythona:

QWidget.setLayout (własny, QLayout)

Argument QLayout ma swoją własność przeniesioną do Qt.

Ustawia menedżera układu dla tego widgetu na układ.

Jeśli na tym widżecie jest już zainstalowany menedżer układu, QWidget nie pozwoli Ci zainstalować innego. Najpierw należy usunąć istniejący menedżer układu (zwrócony przez layout ()), zanim będzie można wywołać setLayout () z nowym układem.

Jeśli układ jest menedżerem układu na innym widgecie, setLayout () ponownie wyświetli układ i uczyni go menedżerem układu dla tego widgetu.

Przykład:

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

Alternatywą dla wywołania tej funkcji jest przekazanie tego widgetu do konstruktora układu.

QWidget przejmie własność układu.

Zobacz także układ () i Zarządzanie układem.

questionAnswers(1)

yourAnswerToTheQuestion