垃圾收集是否可以将子窗口小部件的pyside / Qt引用保留为成员变量?

时间:2012-04-13 22:00:30

标签: python qt garbage-collection pyside

从垃圾收集/正确的清理角度来看,这样可以吗?

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))

感谢您分享的任何见解......

1 个答案:

答案 0 :(得分:2)

第一个很好。如果您没有对实例外部创建的MySubWidget进行任何其他引用,则在删除MyWidget实例时将对其进行垃圾回收。