Получить виджеты макета в PyQT

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

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

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

2 ответа

Решение

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

Тем не менее, в качестве альтернативы вы можете зациклить элементы макета, используя count() а также itemAt(int) поставить QLayoutItem в removeItem(QLayoutItem*),

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

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

Изменить 2:

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

Чтобы получить виджет из 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
Другие вопросы по тегам