После долгих исследований (и это заняло довольно много времени, поэтому я добавил его сюда для дальнейшего использования), я нашел способ действительно очистить и удалить виджеты в макете:
for i in reversed(range(layout.count())):
layout.itemAt(i).widget().setParent(None)
В документации говорится о QWidget :
Новый виджет удаляется при удалении его родителя.
Важное примечание: Необходимо выполнить цикл в обратном направлении, поскольку при удалении объектов с начала элементы перемещаются и изменяется порядок элементов в макете.
Для проверки иубедитесь, что макет пуст:
for i in range(layout.count()): print i
Кажется, есть другой способ сделать это.Вместо использования функции setParent используйте функцию deleteLater () , например:
for i in reversed(range(layout.count())):
layout.itemAt(i).widget().deleteLater()
В документации сказано, что QObject.deleteLater (self)
Запланирует удаление этого объекта.
Однако, если вы запустите тестовый код, указанный выше, он напечатает некоторые значения.Это означает, что в макете по-прежнему есть элементы, в отличие от кода с setParent .