在PyQT中获取布局的小部件


问题内容

我已经通过QVBoxLayout添加了一些小部件addWidget()。我现在需要删除那些小部件,并且看来我需要使用removeWidget()(需要删除一个小部件)来执行此操作。

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

我是不是很误会什么?我上周刚开始进行PyQT,并且大部分时间都在通过API文档的反复试验来学习。


问题答案:

真奇怪 我的理解是,通过addWidget将所有权转移到布局中来添加小部件,因此调用children()应该起作用。

然而,通过使用替代你可以遍历布局项目count(),并itemAt(int)提供一个QLayoutItemremoveItem(QLayoutItem*)

编辑:

我刚刚尝试addWidget了一个直接的C
++测试应用程序。并且它不会将QObject所有权转移到版面,因此children()确实是一个空列表。该文档清楚地说,所有权转移,但…

编辑2:

好的,看起来好像是将所有权转移给具有该布局的小部件(这 不是
文档所说的)。这使得QObject层次结构中布局本身的布局同级中的项目!因此,更容易使用countitemAt