当前位置: 首页 > 面试题库 >

从布局中删除所有项目

龚寂弦
2023-03-14
问题内容

我试图找到一些可以使用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'

=>编辑这种方法很有效(但是,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()

问题答案:

清除布局的最安全方法是使用其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())


 类似资料:
  • 问题内容: 谁能告诉我从我删除所选项目的简便方法? 我在Google和此处进行了搜索,但发现了很多方法。我应该使用哪种方式? 问题答案: 正如@Andreas_D所说,以数据为中心,更抽象的ListModel是解决方案。这可以是DefaultListModel。您应该在JList中显式设置模型。所以(感谢@kleopatra发表评论): DefaultListModel中有几种方法。 顺便说一句,

  • 问题内容: 我将如何使用python检查列表并删除所有重复项?我不需要指定重复项是什么- 我希望代码找出是否存在重复项,如果有则将其删除,每个重复项仅保留一个实例。如果列表中有多个重复项,它也必须起作用。 例如,在下面的代码中,列表lseparatedOrbList有12个项目-一项被重复六次,一项被重复五次,并且只有一个实例。我希望它更改列表,因此只有三项-每一项,并且它们之前出现的顺序相同。我

  • 我使用的是,我希望删除所有出现的特定元素。 它只删除了第一次出现的情况。但是我希望在我希望list仅用值“second”省略。我通过谷歌搜索发现,可以通过创建新列表并调用来实现。但是,是否有可能在不创建新列表的情况下删除所有事件,或者是否有任何可用的API来实现它?

  • 问题内容: 我有一个数组: 我想从中删除所有零,以便返回(保持相同的顺序): 有什么比以下方法更简单的方法来删除所有零? 我无法在Arrays类中找到任何方法,并且Google / SO搜索没有给我任何好的答案。 问题答案: 这是在少数情况下,用代码显示比用普通英语解释更容易的情况之一:

  • 问题内容: 所以我有一个Java哈希图,如下所示: 我想删除所有值为“ Two”的项目 如果我做类似的事情: 只有第一个被删除,我想全部删除,该怎么做? 问题答案: 编辑: 这种简洁方法的(显着)缺点是您基本上被迫发表评论,说出类似 否则,一些好心的工程师将有一天会尝试为您简化并破坏它。发生这种情况…有时候好心做的事甚至是Future You!

  • 问题内容: 有没有办法清除(删除)布局中的所有小部件? 现在,我想用新的小部件替换小部件。有一种简单的方法可以清除其中的所有小部件吗?我看不到任何这样的方法。 问题答案: 经过大量研究(此过程花了很长时间,因此我将其添加到此处以供将来参考),这是我发现真正清除和 删除 布局中的小部件的方法: 关于 QWidget 的文档说的是: 删除其父项时,将删除新的窗口小部件。 重要说明: 您需要向后循环,因