PyQt5-QObject(05)-对象删除

对象删除

API

obj.deleteLater() 删除一个对象时, 也会解除它与父对象之间的关系,deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象,这样做的好处是可以在这些延迟删除的时间内完成一些操作,坏处就是内存释放会不及时。

API Dome

del 只是删除指向对象的变量,并没有删除数据。下面运行过程中OBJ对象并没有被释放,只是删除了OBJ变量,后面不能使用。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject learning")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.TypeDetermine()

    def TypeDetermine(self):
        OBJ=QObject(self)
        OBJ.destroyed.connect(lambda :print("OBJ被释放"))
        del OBJ
        try:
            OBJ.setObjectName("test")
        except:
            print("OBJ不存在")

if __name__ == '__main__':
     app=QApplication(sys.argv)
     window=Window()
     window.show()
     sys.exit(app.exec())
    
    
Running result: 
D:\mypython\Pyqt5learning\Scripts\python.exe D:/mypython/Pyqt5learning/Dome7.py 
OBJ不存在
 

deleteLater可以将对象删除,但不会立即删除,下面运行结果先打印OBJ对象,后面才打印“OBJ被释放”就可以验证这点。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject learning")
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        self.TypeDetermine()

    def TypeDetermine(self):
        OBJ=QObject(self)
        OBJ.destroyed.connect(lambda :print("OBJ被释放"))
        OBJ.deleteLater()
        print(OBJ)
       

if __name__ == '__main__':
     app=QApplication(sys.argv)
     window=Window()
     window.show()
     sys.exit(app.exec())
    
    
Running result: 
D:\mypython\Pyqt5learning\Scripts\python.exe D:/mypython/Pyqt5learning/Dome7.py 
<PyQt5.QtCore.QObject object at 0x00000214743BAB80>
OBJ被释放
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值