【发布时间】:2023-03-12 01:46:01
【问题描述】:
我尝试使用一些小部件创建 GUI,所有这些小部件都没有指定父级。 效果很好。
这样可以吗,还是有理由指定父级?
谢谢!
【问题讨论】:
标签: python pyqt parent-child
我尝试使用一些小部件创建 GUI,所有这些小部件都没有指定父级。 效果很好。
这样可以吗,还是有理由指定父级?
谢谢!
【问题讨论】:
标签: python pyqt parent-child
一般来说,最好尽可能指定父对象,因为它可以帮助避免对象清理问题。这在退出程序时最常见,此时 python 垃圾收集器的固有随机性可能意味着对象有时会以错误的顺序被删除,从而导致程序崩溃。
然而,这个问题的发现通常不会影响标准的 GUI 小部件,因为一旦它们被添加到布局中,Qt 会自动重新设置它们。问题较多的对象是与视图密切相关的项目模型、项目委托、图形场景等。
理想情况下,pyqt 程序应该有一个根窗口,所有其他对象都以父子层次结构连接到它。当根被删除/关闭时,Qt 也会递归地删除它的所有子对象。这应该只留下 pyqt 包装器对象,它们可以安全地留给 python 垃圾收集器进行清理。
指定父对象的一个更具建设性的好处是,它只是使对象更易于彼此访问。例如,一个常见的习惯用法是通过其父级迭代一组按钮:
for button in parent.findChildren(QAbstractButton):
print(button.text())
【讨论】: