python – 删除小部件和布局
发布时间:2020-12-20 12:42:27 所属栏目:Python 来源:网络整理
导读:我试图找到一些需要qt布局并从中删除所有内容的东西.想象一下窗口是什么样的 – 我有: QVBoxLayout | ------QHboxLayout |---------QWidget | ------QHboxLayout |---------QWidget ......... 所以我需要一些东西,我可以递归地调用CLEAR AND DELETE来自我的
|
我试图找到一些需要qt布局并从中删除所有内容的东西.想象一下窗口是什么样的 – 我有:
QVBoxLayout
| ------QHboxLayout
|---------QWidget
| ------QHboxLayout
|---------QWidget
.........
所以我需要一些东西,我可以递归地调用CLEAR AND DELETE来自我的父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'
=>编辑 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()
解决方法
清除布局最安全的方法是使用
takeAt方法提取项目,然后使用
deleteLater显式删除任何小部件:
def clearLayout(self,layout):
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.deleteLater()
else:
self.clearLayout(item.layout())
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
