python - pyside : Children objects not destroyed on close of parent object

标签 python qt pyside

我有以下代码:

import sys
from PySide import QtGui
from PySide import QtCore

class Main_Window(QtGui.QMainWindow):
    def __init__(self):
        super(Main_Window,self).__init__()
        self.initUI()

    def initUI(self):
        self.navigateur=QtGui.QMdiArea()
        self.setCentralWidget(self.navigateur)
        self.setGeometry(50, 50, 600, 600)
        self.window =QtGui.QWidget(None,QtCore.Qt.WA_DeleteOnClose)
        self.window.grid=QtGui.QGridLayout()
        self.window.button=QtGui.QPushButton("quit",parent=self.window)
        self.window.button.setObjectName("test")
        self.window.button.clicked.connect(self.try_close)
        self.window.grid.addWidget(self.window.button)
        self.window.setLayout(self.window.grid)
        self.window.setFixedSize(self.window.sizeHint())
        self.fwindow=self.navigateur.addSubWindow(self.window,QtCore.Qt.WA_DeleteOnClose)
        self.show()

    def try_close(self):
        self.fwindow.close()
        print(self.window.findChild(QtGui.QPushButton,"test"))

def main():
    app=QtGui.QApplication(sys.argv)
    main_wdw=Main_Window()
    sys.exit(app.exec_())

if __name__=="__main__":
    main()

根据文档,当我关闭 self.window 时,self.window 的所有子级都应被删除,但情况似乎并非如此,因为打印函数在 .. 处打印类似 PySide.QtGui.QPushButton 对象的内容。 .

出了什么问题?

最佳答案

在 Qt 中,QObject 不会立即删除(请参阅 QObject::deleteLater() 方法)。在Python中,对象被垃圾收集器删除。

因此,您的小部件可能会在删除之前保留在内存中一圈。

关于python - pyside : Children objects not destroyed on close of parent object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705820/

相关文章:

python - Matplotlib:如何使背景透明?

c++ - Qt : pass values from a window to another

c++ - 如何创建 QList 的深拷贝 (Qt 4.8)

python - 如何在 PySide 中发出以 self 作为参数的信号?

python - 将 PySpark DataFrame 列中的负值替换为零的最有效方法是什么?

python - 我能以某种方式告诉 SAX 解析器在某个元素处停止并将其子节点作为字符串获取吗?

Qt - 如何构建多标签窗口?

python - PyCharm 中的 PySide 代码补全

qt - 寻找具有分段完成/树模型的 QCompleter 示例

python - 我可以实现自己的基于 Python 的 git merge 策略吗?