Допустим, есть QVBoxLayout, в который динамически добавляются кнопки:
labels = ['Button 1', 'Button 2', 'Button 3']
for label in labels:
button = QPushButton(label)
self.vbox.addWidget(button)
Это происходит внутри метода класса и по идее все переменные локальные, так что должны уничтожиться после выхода из него (если сделать button = None в конце, то ничего не меняется).
А затем в какой-то момент времени мы хотим удалить эти кнопки:
while self.target_buttonbox.takeAt(0):
pass
В результате данного цикла кнопки удаляются лишь из layout'а, но не сами объекты. Это выглядит как видимые кнопки, которые больше не подчиняются layout. Если же делать не просто takeAt, а вызывать deleteLater к полученному takeAt виджету, то приложение крашится.
Как правильно удалить все виджеты окончательно?