PyQt - 小部件的父级 - 必要吗?

时间:2016-03-03 20:34:31

标签: pyqt

我尝试使用一些小部件创建GUI,所有小部件都没有对父级进行仲裁。 它运作良好。

这是好的,还是有理由指定父母?

谢谢!

1 个答案:

答案 0 :(得分:7)

通常,最好尽可能指定父级,因为它可以帮助避免对象清理的问题。这在退出程序时最常见,当python垃圾收集器的固有随机性可能意味着对象有时会以错误的顺序被删除,导致程序崩溃。

但是,这个问题的发现通常不会影响标准的GUI小部件,因为Qt会在添加到布局后自动重新显示它们。更有问题的对象是项目模型,项目代表,图形场景等,它们与视图紧密相关。

理想情况下,pyqt程序应该有一个根窗口,所有其他对象在父子层次结构中连接到它。删除/关闭根时,Qt也将递归删除其所有子对象。这应该只留下pyqt包装器对象,可以安全地留给python垃圾收集器进行清理。

指定父母的一个更具建设性的好处是,它只是让对象更容易相互访问。例如,一个常见的习惯用法是通过父对象迭代一组按钮:

    for button in parent.findChildren(QAbstractButton):
        print(button.text())