Я пытался найти что-то, что могло бы взять макет qt и удалить из него все.Просто чтобы представить, как выглядит окно - у меня есть:
QVBoxLayout
| ------QHboxLayout
|---------QWidget
| ------QHboxLayout
|---------QWidget
.........
Так что мне нужно что-то, что я могу рекурсивно вызвать, чтобы ОЧИСТИТЬ И УДАЛИТЬ все вещи из моего родителя QVBoxLayout
.Я пробовал вещи, упомянутые здесь ( Очистить все виджеты в макете в pyqt ), но ни один из них не работает (в любом случае правильный ответ не отмечен).Мой код выглядит так:
def clearLayout(self, layout):
for i in range(layout.count()):
if (type(layout.itemAt(i)) == QtGui.QHBoxLayout):
print "layout " + str(layout.itemAt(i))
self.clearLayout(layout.itemAt(i))
else:
print "widget" + str(layout.itemAt(i))
layout.itemAt(i).widget().close()
Но выдает ошибку:
layout.itemAt(i).widget().close()
AttributeError: 'NoneType' object has no attribute 'close'
=> РЕДАКТИРОВАТЬ Это вроде работает (но не, если есть другие Layout
, чемHBoxLayout
:
def clearLayout(self, layout):
layouts = []
for i in range(layout.count()):
if (type(layout.itemAt(i)) == QtGui.QHBoxLayout):
print "layout " + str(layout.itemAt(i))
self.clearLayout(layout.itemAt(i))
layouts.append(layout.itemAt(i))
else:
print "widget" + str(layout.itemAt(i))
if (type(layout.itemAt(i)) == QtGui.QWidgetItem):
layout.itemAt(i).widget().close()