Получить виджеты макета в PyQT - PullRequest
5 голосов
/ 20 июня 2010

У меня есть QVBoxLayout, к которому я добавил несколько виджетов через addWidget().Теперь мне нужно удалить эти виджеты, и мне кажется, что для этого нужно использовать removeWidget() (что требует удаления виджета).

Я думал, что вызов children() или findChildren(QWidget) намой макет вернет список виджетов, которые я добавил в него;Однако я нахожусь в отладчике и просто получаю пустые списки.

Я что-то ужасно неправильно понимаю?Я только начал делать PyQT на прошлой неделе и в основном учился методом проб и ошибок с помощью документации API.

Ответы [ 2 ]

10 голосов
/ 20 июня 2010

Странно.Насколько я понимаю, добавление виджетов с помощью addWidget передает право собственности на макет, поэтому вызов children() должен работать.

Однако, в качестве альтернативы, вы можете перебирать элементы макета с помощью count() и itemAt(int) предоставить QLayoutItem для removeItem(QLayoutItem*).

Редактировать:

Я только что попробовал addWidget с прямым тестовым приложением C ++.и он не передает владение QObject макету, поэтому children() действительно пустой список.В документах четко сказано, что право собственности передается, хотя ...

Редактировать 2:

Хорошо, похоже, что оно передает право собственностивиджет с таким макетом (который не , как сказано в документации).Это делает элементы в макете родственными элементами самого макета в иерархии QObject!Поэтому проще придерживаться count и itemAt.

5 голосов
/ 24 августа 2017

Чтобы получить виджет из QLayout, вы должны вызвать его метод itemAt(index).Как следует из названия этого метода, он вернет элемент вместо виджета.Вызов widget() для результата, наконец, даст вам виджет:

myWidget = self.myLayout.itemAt(index).widget()

Чтобы удалить виджет, установите родительский виджет на None:

myWidget.setParent(None)

Также очень полезнометод QLayout count().Чтобы найти и удалить все содержимое макета:

index = myLayout.count()
while(index >= 0):
    myWidget = myLayout.itemAt(index).widget()
    myWidget.setParent(None)
    index -=1
...