代码之家  ›  专栏  ›  技术社区  ›  Xiong Chiamiov

在PyQT中获取布局的小部件

  •  5
  • Xiong Chiamiov  · 技术社区  · 15 年前

    我有一个 QVBoxLayout addWidget() . 我现在需要删除这些小部件,似乎我需要使用 removeWidget() (它接收要删除的小部件)来执行此操作。

    我以为打电话 children() findChildren(QWidget) 在我的布局上会返回我添加到其中的小部件列表;不过,我在调试器中,只收到空列表。

    我是不是误会了什么?上周我刚开始做PyQT,主要是通过API文档的反复试验来学习。

    2 回复  |  直到 15 年前
        1
  •  14
  •   ekhumoro    9 年前

    addWidget 将所有权转移到布局 children() 应该有用。

    但是,也可以使用 count() itemAt(int) 提供 QLayoutItem removeItem(QLayoutItem*)

    编辑:

    我刚试过 添加小部件 QObject 布局的所有权 儿童() 确实是一张空名单。这个 docs

    好的,看起来好像它将所有权转移到了具有该布局(即 医生说了什么)。这使得布局中的项与 Q对象 count itemAt .

        2
  •  16
  •   Arnoud Vangrunderbeek    8 年前

    itemAt(index) 方法。 正如这个方法的名称所暗示的,它将返回一个项而不是一个小部件。打电话 widget() 结果将最终为您提供小部件:

    myWidget = self.myLayout.itemAt(index).widget()
    

    要删除小部件,请将父小部件设置为 None

    myWidget.setParent(None)
    

    QLayout也很有用 count()

    index = myLayout.count()
    while(index >= 0):
        myWidget = myLayout.itemAt(index).widget()
        myWidget.setParent(None)
        index -=1