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.运行结果
- 窗口
- 控制台