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'
=>编辑
这种方式有效(但如果除了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()解决方法 清除布局最安全的方法是使用 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())总结
以上是内存溢出为你收集整理的python – 删除小部件和布局全部内容,希望文章能够帮你解决python – 删除小部件和布局所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)