Qt for Python中无引用实例化对象是否属于不良开发实践?
你提供的这种写法不属于不良实践,可以正常使用,没有隐藏问题。
原因说明
Qt 本身自带父子对象生命周期管理机制,当你调用 vb_main.addWidget(QLabel('Foo')) 把标签添加到布局后,布局会自动将这些标签的父对象设置为布局所属的主窗口(也就是你的 MainWindow 实例)。只要主窗口没有被销毁,这些子标签对象就会一直被 Qt 持有,不会被 Python 的垃圾回收机制提前回收,完全不会出现野指针或者对象意外销毁的问题。
你看到的「必须保存所有创建的对象引用」的规则,仅适用于没有绑定任何父对象的 Qt 对象场景:比如你直接创建了一个没有父控件的弹窗,写了 QDialog().show(),既没有给它设置父对象,也没有在 Python 侧保留引用,那这个弹窗刚弹出就会被 Python GC 回收消失。这种场景下才需要你手动保留引用,比如把弹窗赋值给实例变量 self.dialog = QDialog() 再调用 show 方法。
你的示例里所有控件都有明确的父对象绑定,生命周期和主窗口完全同步,不需要额外保留无用的引用,这种写法反而更简洁,属于合理的写法。
内容的提问来源于stack exchange,提问作者Cirrocumulus
相关产品推荐
相关产品推荐

