Удаление всех элементов из макетаPython

Программы на Python
Ответить
Anonymous
 Удаление всех элементов из макета

Сообщение Anonymous »

Я пытался найти что-то, что могло бы взять макет 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'


=>РЕДАКТИРОВАТЬ
Это вроде работает (но не работает, если есть какой-либо другой макет, кроме 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()


Подробнее здесь: https://stackoverflow.com/questions/937 ... m-a-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»