020-QObject-对象的父子关系-Qt内存管理机制
资源:Python-GUI-PyQ5总概述.xmind;QObject.xmind
一、QObject
(1)所有的对象都是直接或者间接的继承自QObject
(2)QObjects在一个对象树中组织他们自己,当创建一个QObject时,如果使用了其他对象作为其父对象,那么,他就会被添加到父对象的children()列表。
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QObject的学习") # 窗口标题
self.resize(500, 500) # 设置窗口大小
self.setup_ui()
def setup_ui(self):
self.QObject内存管理机制()
def QObject内存管理机制(self):
obj1=QObject()
obj2=QObject()
obj2.setParent(obj1)
#监听obj2对象被释放
obj2.destroyed.connect(lambda:print("obj2对象被释放了"))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
#返回
'''
obj2对象被释放了
'''
(3)当父对象被销毁时,这个QObject也会被销毁。(如下代码所示)
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QObject的学习") # 窗口标题
self.resize(500, 500) # 设置窗口大小
self.setup_ui()
def setup_ui(self):
self.QObject内存管理机制()
def QObject内存管理机制(self):
obj1=QObject()
self.obj1=obj1
obj2=QObject()
obj2.setParent(obj1)
#监听obj2对象被释放
obj2.destroyed.connect(lambda:print("obj2对象被释放了"))
del self.obj1
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
#返回
'''
obj2对象被释放了
'''
二、QWidget
(1)扩展了父-子关系
(2)当一个控件设置了父控件,则这个控件会包含在父控件的内部、受父控件区域剪裁、父控件被删除是,子控件会自动删除。
(3)场景案例
①一个对话框,上面有很多操作按钮(取消,ok):按钮和对话框本身是父子控件关系。
②我们操作的时候,操作的是对话框控件的本身,而不是其内部的子控件(按钮)
③当对话框被删除时,内部的子控件也会自动删除
还没有评论,来说两句吧...