让我的垃圾收集保留对子小部件的 pyside/Qt 引用作为成员变量会妨碍正确清理吗?
Posted
技术标签:
【中文标题】让我的垃圾收集保留对子小部件的 pyside/Qt 引用作为成员变量会妨碍正确清理吗?【英文标题】:Does having my garbage collection keep pyside/Qt references to sub-widgets as member variables prevent proper cleanup? 【发布时间】:2012-04-13 22:00:29 【问题描述】:从垃圾收集/正确清理的角度来看,这是我所拥有的:
class MyWidget(QWidget):
def __init__(self,qtParent):
QWidget.__init__(self,qtParent):
self.mySubWidget = MySubWidget(self) # <-- keeping a direct reference to the child
当我销毁 MyWidget 时,当我调用下面的代码时,mySubWidget 是否也会被 Qt/pyside/python 正确销毁?
setAttribute( Qt.DeleteOnClose, True)
myWidget.close()
或者,我应该像下面这样使用弱引用吗?
import weakref
class MyWidget(QWidget):
def __init__(self,qtParent):
QWidget.__init__(self,qtParent):
self.mySubWidget = weakref.ref(MySubWidget(self))
【问题讨论】:
如果您对何时释放对象有疑问,请给它__del__
method 并找出答案。
【参考方案1】:
第一个很好。如果您在实例之外没有对创建的MySubWidget
的任何其他引用,那么当您删除MyWidget
实例时,它将被垃圾回收。
【讨论】:
以上是关于让我的垃圾收集保留对子小部件的 pyside/Qt 引用作为成员变量会妨碍正确清理吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 PySide (Qt) 中打开另一个程序并在原始窗口中显示