PyQt - parent for widgets - 必要吗?

PyQt - parent for widgets - necessary?

我尝试用一​​些小部件创建 GUI,所有这些都没有确定 parent。 效果很好。

这样可以吗,或者有理由指定 parent?

谢谢!

一般来说,最好尽可能指定 parent,因为它可以帮助避免 object 清理出现问题。这在退出程序时最常见,因为 python garbage-collector 的固有随机性可能意味着 object 有时会以错误的顺序被删除,从而导致程序崩溃。

但是,这个发现的问题通常不会影响标准的 GUI 小部件,因为 Qt 会在将它们添加到布局后自动重新parent它们。比较有问题的 object 是 item-models、item-delegates、graphics-scenes 等,它们与视图密切相关。

理想情况下,pyqt 程序应该有一个根 window,所有其他 object 在 parent-child 层次结构中连接到它。当根为deleted/closed时,Qt也会递归删除其所有child object。这应该只留下 pyqt 包装器 objects,可以安全地留给 python garbage-collector 进行清理。

指定 parents 的一个更具建设性的好处是,它只是让 objects 更容易被彼此访问。例如,一个常见的习惯用法是通过 parent:

遍历一组按钮
    for button in parent.findChildren(QAbstractButton):
        print(button.text())