65 votes

Effacer tous les widgets dans une disposition dans pyqt

Existe-t-il un moyen d'effacer (supprimer) tous les widgets d'une mise en page ?

self.plot_layout = QtGui.QGridLayout()
self.plot_layout.setGeometry(QtCore.QRect(200,200,200,200))
self.root_layout.addLayout(self.plot_layout)
self.plot_layout.addWidget(MyWidget())

Maintenant, je veux remplacer le widget dans plot_layout avec un nouveau widget. Existe-t-il un moyen simple d'effacer tous les widgets de l'application plot_layout ? Je ne vois pas de méthode de ce type.

1voto

Harald Scheirich Points 7227

Quelques solutions : si vous passez d'une vue connue à une autre en utilisant un widget empilé et en inversant simplement l'index affiché, cela peut être beaucoup plus facile que d'ajouter et de supprimer des widgets individuels d'une mise en page.

Si vous voulez remplacer todo les enfants d'un widget, alors le QObject fonctions findChildren Je ne sais pas comment les fonctions de template sont intégrées dans pyqt. Mais vous pouvez aussi rechercher les widgets par leur nom si vous les connaissez.

1voto

BaiJiFeiLong Points 498
for i in reversed(range(layout.count())):
    if layout.itemAt(i).widget():
        layout.itemAt(i).widget().setParent(None)
    else:
        layout.removeItem(layout.itemAt(i))

0voto

borovsky Points 136
        for i in reversed (range(layout.count())):
            layout.itemAt(i).widget().close()
            layout.takeAt(i)

ou

        for i in range(layout.count()):
            layout.itemAt(0).widget().close()
            layout.takeAt(0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X