加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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'

=>编辑
这种方式有效(但如果除了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())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读