2.4 QObject-对象删除

一、对象删除

1.基础知识

  • 在代码执行完之后删除对象:deleteLater():

注意:

  • del obj2 只能删除栈中的对象,不能堆中的对象,相当于切断联系,不能真正的删除
  • obj2.deleteLater() 1.删除栈中的对象,真正的删除 2.在整段代码结束之后,才会执行这个方法

2.代码

from PyQt5.Qt import *
import sys


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("对象删除")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        obj1 = QObject()
        self.obj1 = obj1   #self相当于window,全局变量,window不关闭,就不会释放,关闭后全部释放
        obj2 = QObject()
        obj3 = QObject()
        obj2.setParent(obj1)
        obj3.setParent(obj2)
        print(obj1)
        print(obj2)
        print(obj3)

        #根据obj1是全局变量还是局部变量而决定什么时候释放
        obj1.destroyed.connect(lambda : print('obj1被释放'))
        obj2.destroyed.connect(lambda : print('obj2被释放'))
        obj3.destroyed.connect(lambda : print('obj3被释放'))

        # del obj2  #只能删除栈中的对象,不能堆中的对象,相当于切断联系,不能真正的删除
        print(obj2.deleteLater()) #1.删除栈中的对象,真正的删除 2.在整段代码结束之后,才会执行这个方法
        print(obj1.children())  #先执行这条,在执行上面那条代码

        # 案例
        label1 = QLabel(self)
        label1.setText('label1')
        label1.move(50, 50)
        label1.setStyleSheet('background-color:green')

        label2 = QLabel(self)
        label2.setText('label2')
        label2.move(100, 100)
        label2.setStyleSheet('background-color:green')

        label3 = QLabel(self)
        label3.setText('label3')
        label3.move(150, 150)
        label3.setStyleSheet('background-color:green')

        label2.deleteLater()
        #del label2


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())

3.运行结果

  • 窗口
  • 控制台
posted @ 2022-03-22 20:54  Trouvaille_fighting  阅读(284)  评论(0)    收藏  举报