0

如何在我的 gui 类中为所有 QWidgets、QLayouts、QFrames 等分配 ObjectNames?像这样的代码只适用于 PyQt4:

for w in gui.widgets():
   w.setObjectName(str(w)

这在 PyQt5 中是如何工作的?另外,我如何迭代所有对象而不是“只是”小部件?我知道对于 C++ 的这个问题有一些答案,但是我无法将它们翻译成 python。

4

1 回答 1

1

主 QObject 或 QWidget 类没有widget()功能,因此您可能在自己的代码中实现并且在更新 PyQt5 时忘记更新它。

要访问所有子对象,只需使用findChildrenwithQObject作为第一个参数,它将返回 QObject 类的所有后代,包括 QWidgets、QActions、项目模型等:

for child in self.findChildren(QObject):
    pass

由于findChildren默认递归查找,因此您还可以限制为当前对象的直接子对象:

for child in self.findChildren(QObject, options=FindDirectChildrenOnly):
    pass

在这种情况下,结果将与 相同self.children()

请注意,并非 Qt 中的所有类都继承自 QObject。

于 2019-11-26T12:10:27.710 回答