Я пытался найти что-то, что бы взяло макет qt и удалить все из него. Просто представьте себе, что выглядит окно, как - у меня есть:Удалите виджеты и макет, а также
QVBoxLayout
| ------QHboxLayout
|---------QWidget
| ------QHboxLayout
|---------QWidget
.........
Так что мне нужно что-то, что я могу назвать рекурсивно очистить и удалить все вещи из моего родителя QVBoxLayout
. Я пробовал вещи, упомянутые здесь (Clear all widgets in a layout in 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()
Это более элегантное решение. спасибо – tisaconundrum