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

清除pyqt中布局中的所有小部件

闽哲
2023-03-14
问题内容

有没有办法清除(删除)布局中的所有小部件?

self.plot_layout = QtGui.QGridLayout()
self.plot_layout.setGeometry(QtCore.QRect(200,200,200,200))
self.root_layout.addLayout(self.plot_layout)
self.plot_layout.addWidget(MyWidget())

现在,我想plot_layout用新的小部件替换小部件。有一种简单的方法可以清除其中的所有小部件plot_layout吗?我看不到任何这样的方法。


问题答案:

经过大量研究(此html" target="_blank">过程花了很长时间,因此我将其添加到此处以供将来参考),这是我发现真正清除和 删除 布局中的小部件的方法:

for i in reversed(range(layout.count())): 
    layout.itemAt(i).widget().setParent(None)

关于 QWidget 的文档说的是:

删除其父项时,将删除新的窗口小部件。

重要说明: 您需要向后循环,因为从一开始删除内容会更改项目并更改布局中项目的顺序。

要测试并确认布局为空:

for i in range(layout.count()): print i

似乎还有另一种方法。代替使用setParent函数,可以使用deleteLater()函数,如下所示:

for i in reversed(range(layout.count())): 
    layout.itemAt(i).widget().deleteLater()

该文档说 QObject.deleteLater(个体经营)

计划删除该对象。

但是,如果运行上面指定的测试代码,它将打印一些值。这表明与 setParent 的代码相比,布局仍然具有项目。



 类似资料:
  • 问题内容: 我试图找到一些可以使用qt布局并从中删除所有内容的东西。只是想像一下窗口是什么样子-我有: 所以我需要可以递归调用的东西,以清除并删除父母的所有东西。我尝试了这里提到的事情(在pyqt中清除布局中的所有小部件),但是它们都不起作用(无论如何都没有标记正确答案)。我的代码如下所示: 但这给出了一个错误: =>编辑这种方法很有效(但是,除了: 问题答案: 清除布局的最安全方法是使用其tak

  • 问题内容: 我有一个要删除的带有孩子的小部件。我怎么做?我找不到任何,,或任何类似的文档。我只能看到如何从布局中删除内容,但是显然,它并没有从实际的窗口小部件中删除它。 问题答案: 好吧,这可行:在要删除的小部件上,调用。我喜欢添加到布局中的方式,将小部件添加到容器中,但是从布局中删除则不…有趣的东西。

  • 问题内容: 更改标签的字体大小以匹配通过信号/插槽包含的布局大小的具体方法是什么? 问题答案: 以下是从此处发布的解决方案衍生出来的解决方案:https : //forum.qt.io/topic/36088/automatically-scale- text-in-qlabels/5 。 这包括方法的重新实现,其中根据的大小更新的字体大小。请注意,必须将Qlabel的设置为此才能正常工作。 结果

  • 问题内容: Ingredient_list是一个显示诸如…(“糖”,“ 1杯”)之类的列表,依此类推… def是针对所选组合框的,所以我想要的是清除树形视图而不是只是继续添加更多的成分。不幸的是我没有看到一种方法。 如果有一种编程的方式来识别首先存在的内容(枚举行数将是个好方法……),这真让我发疯。我确实在文档中注意到您可以使用delete方法,但是它想知道要删除的项目…如果使用: 我懂了 所以我

  • 我们设置了几个ActiveMQ Artemis 2.17.0集群,以便在数据中心之间使用镜像进行复制。 在ActiveMQ Artemis 2.17.0或更高版本中有什么方法可以实现这一点吗?

  • 问题内容: 我正在尝试创建一个向用户展示一些数据的活动。数据可以分为“单词”,每个单词都是一个小部件,“单词”的序列将构成数据(“句子”?),ViewGroup小部件包含这些单词。由于“句子”中所有“单词”所需的空间将超过显示器上可用的水平空间,因此,我想像平常的文本一样包装这些“句子”。 如下代码: 产生类似于左图的内容,但是我想要一种布局来呈现与右图相同的小部件。 是否有这样的布局或布局和参数