I have a
QVBoxLayout that I've added a few widgets to, via
addWidget(). I need to now delete those widgets, and it seems I need to use
removeWidget() (which takes in a widget to be removed) to do that.
I thought that calling
findChildren(QWidget) on my layout would return a list of the widgets I've added into it; I'm in the debugger, though, and am just receiving empty lists.
Am I terribly misunderstanding something? I've just started doing PyQT this last week and have mostly been learning through trial and error with the API docs.
That's odd. My understanding is that adding widgets via
addWidget transfers ownership to the layout so calling
children() ought to work.
However, as an alternative you could loop over the layout items by using
itemAt(int) to supply a
I've just tried
addWidget with a straight C++ test app. and it doesn't transfer
QObject ownership to the layout so
children() is indeed an empty list. The docs clearly say that ownership is transferred though...
Okay, it looks as though it transfers ownership to the widget that has that layout (which is not what the docs said). That makes the items in the layout siblings of the layout itself in the
QObject hierarchy! It's therefore easier to stick with
To get a widget from a QLayout, you have to call its
As the name of this method implies, it will return an item instead of a widget. Calling
widget() on the result will finally give you the widget:
myWidget = self.myLayout.itemAt(index).widget()
To remove a widget, set the parent widget to
Also really helpfull is the QLayout
count() method. To find and delete all contents of a layout:
index = myLayout.count() while(index >= 0): myWidget = myLayout.itemAt(index).widget() myWidget.setParent(None) index -=1