QObject
setObjectName('唯一名称') # 给Qt对象设置一个名称,当做对象的ID来使用
objectName() # 获取Qt对象的名称
setProperty('属性名称','值') # 给Qt对象动态的添加一个属性与值(键值对模式)
property("属性名称") # 通过对象的属性名称获取其属性值
dynamicPropertyNames() # 获取一个对象中所有通过 setProperty() 设置的属性名称
obj2.setParent(obj1) # 设置父类,把obj2设置为obj1的父对象
obj2.parent() # 获取父对象
obj1.children() # 获取所有直接子对象,返回一个列表
obj1.findChild(参数1, 参数2, 参数3) # 获取第一个指定类型和名称的后代对象,找到第一个就返回结果
参数1:类型如 QObject;类型元组如 (QPushButton, QLabel)
参数2:名称 notice(可以省略)
参数3:查找选项
Qt.FindChildrenRecursively 递归查找,默认选项;
Qt.FindDirectChildrenOnly 只查找直接子对象;
obj1.findChildren(参数1, 参数2, 参数3) # 获取所有指定类型和名称的后代对象,返回一个列表
参数同上
功能作用
setObjectName('唯一名称') # 给Qt对象设置一个名称,当做对象的ID来使用
objectName() # 获取Qt对象的名称
setProperty('属性名称','值') # 给Qt对象动态的添加一个属性与值(键值对模式)
property("属性名称") # 通过对象的属性名称获取其属性值
dynamicPropertyNames() # 获取一个对象中所有通过 setProperty() 设置的属性名称
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super(Windows, self).__init__()
self.setWindowTitle('对象的名称和属性')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj = QObject()
# 设置对象名称:setObjectName('objname')
obj.setObjectName('QObject对象名称')
# 获取对象名称:objectName()
print('获取对象名称:', obj.objectName())
# 设置对象属性:setProperty('属性名', '值')
obj.setProperty('level1','第一')
obj.setProperty('level2','第二')
obj.setProperty('level3','第三')
# 根据属性获取值:property('属性名')
print('获取对象的属性值:', obj.property('level2'))
# 获取对象所有通过setProperty()方法设置的属性:dynamicPropertyNames()
print('# 获取对象所有通过setProperty()方法设置的属性:', obj.dynamicPropertyNames())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
要求:
凡是提示的 QLabel 控件,都要求设置:
字体大小为 20px;
字体颜色为灰色;
边框圆角为 8px。
信息提示分多个级别:
正常 (normal)——绿色边框、绿色字体。
警告 (warning)——黄色边框、黄色字体。
错误 (error)——红色边框、红色字体。
setStyleSheet
设置对象的样式 from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('样式')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
label = QLabel(self)
label.setText('QLabel标签样式')
# 为label标签设置样式
label.setStyleSheet("font-size: 30px; color: purple")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
QLabel{
background-color:yellow;
font-size: 30px;
color: black;
}
QPushButton{
background-color:red;
}
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
with open('./style.qss',mode='r') as f:
app.setStyleSheet(f.read())
def widget_list(self):
self.add_widget()
def add_widget(self):
label1 = QLabel(self)
label1.setText('标签1样式')
label1.move(50,50)
label2 = QLabel(self)
label2.setText('标签2样式')
label2.move(50, 100)
but = QPushButton(self)
but.setText('按钮样式')
but.move(50, 150)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
QLabel#notice{
background-color:yellow;
font-size: 30px;
color: black;
}
QPushButton#but{
background-color:red;
}
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
with open('./style.qss',mode='r') as f:
app.setStyleSheet(f.read())
def widget_list(self):
self.add_widget()
def add_widget(self):
label1 = QLabel(self)
label1.setText('标签1使用样式')
label1.setObjectName('notice')
label1.move(50,50)
label2 = QLabel(self)
label2.setText('标签2使用样式')
label2.setObjectName('notice')
label2.move(50, 100)
label3 = QLabel(self)
label3.setText('标签3不使用样式')
label3.move(50, 150)
but1 = QPushButton(self)
but1.setText('按钮1不使用样式')
but1.move(350, 50)
but2 = QPushButton(self)
but2.setText('按钮2使用样式')
but2.setObjectName('but')
but2.move(350, 100)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
notice
的QLabel对象和对象名称为but
的QPushButton对象才会被修改样式,label3和but1 还是默认样式。QLabel#notice {
font-size: 20px;
color: gray;
border: 1px solid gray;
border-radius: 8px;
}
QLabel#notice[noticelevel="normal"] {
color: green;
border-color: green;
}
QLabel#notice[noticelevel="warning"] {
color: yellow;
border-color: yellow;
}
QLabel#notice[noticelevel="error"] {
color: red;
border-color: red;
}
QPushButton#but{
background-color:red;
}
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
with open('./style.qss',mode='r') as f:
app.setStyleSheet(f.read())
def widget_list(self):
self.add_widget()
def add_widget(self):
label = QLabel(self)
label.setObjectName("notice")
label.setText("没有任何地位的通知")
label.move(50, 50)
label2 = QLabel(self)
label2.setObjectName("notice")
label2.setProperty("noticelevel", "warning")
label2.setText("效率变低啦")
label2.move(50, 100)
label3 = QLabel(self)
label3.setObjectName("notice")
label3.setProperty("noticelevel", "error")
label3.setText("被退学了")
label3.move(50, 150)
label3 = QLabel(self)
label3.setObjectName("notice")
label3.setProperty("noticelevel", "normal")
label3.setText("无事发生")
label3.move(50, 200)
but1 = QPushButton(self)
but1.setText('按钮1不使用样式')
but1.move(350, 50)
but2 = QPushButton(self)
but2.setText('按钮2使用样式')
but2.setObjectName('but')
but2.move(350, 100)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
标签名#ID选择器[属性名='属性值']
QLabel#notice[noticelevel="error"] {
color: red;
border-color: red;
}
QPushButton#but{
background-color:red;
}
label2 = QLabel(self)
label2.setObjectName("notice")
label2.setProperty("noticelevel", "warning")
label2.setText("效率变低啦")
label2.move(50, 100)
but2 = QPushButton(self)
but2.setText('按钮2使用样式')
but2.setObjectName('but')
but2.move(350, 100)
obj2.setParent(obj1) # 设置父类,把obj1设置为obj2的父对象
obj2.parent() # 获取父对象
obj1.children() # 获取所有直接子对象,返回一个列表
obj1.findChild(参数1, 参数2, 参数3) # 获取第一个指定类型和名称的后代对象,找到第一个就返回结果
参数1:类型如 QObject;类型元组如 (QPushButton, QLabel)
参数2:名称 notice(可以省略)
参数3:查找选项
Qt.FindChildrenRecursively 递归查找,默认选项;
Qt.FindDirectChildrenOnly 只查找直接子对象;
obj1.findChildren(参数1, 参数2, 参数3) # 获取所有指定类型和名称的后代对象,返回一个列表
参数同上
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print("obj1's Parebt:", obj1.parent())
print("obj2's Parebt:", obj2.parent())
print("obj3's Parebt:", obj3.parent())
print("obj4's Parebt:", obj4.parent())
print("obj5's Parebt:", obj5.parent())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('')
print("obj0's children:", obj0.children())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
参数1:类型如 QObject;类型元组如 (QPushButton, QLabel)
参数2:名称 notice(可以省略)
参数3:查找选项
Qt.FindChildrenRecursively 递归查找,默认选项;
Qt.FindDirectChildrenOnly 只查找直接子对象;
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj2.setObjectName('obj2')
obj3.setObjectName('obj2')
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj0)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('')
print("obj0's children:", obj0.findChild(QObject))
print("obj0's children:", obj0.findChild(QObject, 'obj2'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
label = QLabel()
obj2.setObjectName('obj2')
obj3.setObjectName('obj2')
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj0)
obj4.setParent(obj2)
obj5.setParent(obj2)
label.setParent(obj0)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('')
print("obj0's children:", obj0.findChild(QLabel))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj2.setObjectName('obj2')
obj3.setObjectName('obj3')
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('')
print("obj0's children:", obj0.findChild(QObject, 'obj3'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj2.setObjectName('obj2')
obj3.setObjectName('obj3')
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('')
print("obj0's children:", obj0.findChild(QObject, 'obj3', Qt.FindDirectChildrenOnly))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
参数1:类型如 QObject;类型元组如 (QPushButton, QLabel)
参数2:名称 notice(可以省略)
参数3:查找选项
Qt.FindChildrenRecursively 递归查找,默认选项;
Qt.FindDirectChildrenOnly 只查找直接子对象;
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
obj6 = QObject()
obj7 = QObject()
obj1.setParent(obj0)
obj2.setParent(obj0)
obj3.setParent(obj1)
obj4.setParent(obj2)
obj5.setParent(obj2)
obj7.setParent(obj1)
obj6.setParent(obj4)
print('obj0:', obj0)
print('obj1:', obj1)
print('obj2:', obj2)
print('obj3:', obj3)
print('obj4:', obj4)
print('obj5:', obj5)
print('obj6:', obj6)
print('obj7:', obj7)
print('')
print("obj0's children:", obj0.findChildren(QObject))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
obj4.setParent(obj3) # 设置obj3为obj4的父对象,obj3销毁,obj4将自动销毁
print(obj1)
print(obj2)
print(obj3)
print(obj4)
obj1.destroyed.connect(lambda :print('obj1被释放了'))
obj2.destroyed.connect(lambda :print('obj2被释放了'))
obj3.destroyed.connect(lambda :print('obj3被释放了'))
obj4.destroyed.connect(lambda :print('obj4被释放了'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
引用计数机制:
PyObject是每个对象必有的内容,当一个对象有新的引用时,它的 ob_refcnt就会增加,
当引用它的对象被删除,它的ob_refcnt就会减少,当引用计数为0时,该对象生命就结束了。
obj1被释放了
obj2被释放了
obj3被释放了
obj4被释放了
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
self.obj1 = obj1
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
obj4.setParent(obj3) # 设置obj3为obj4的父对象,obj3销毁,obj4将自动销毁
print(obj1)
print(obj2)
print(obj3)
print(obj4)
obj1.destroyed.connect(lambda :print('obj1被释放了'))
obj2.destroyed.connect(lambda :print('obj2被释放了'))
obj3.destroyed.connect(lambda :print('obj3被释放了'))
obj4.destroyed.connect(lambda :print('obj4被释放了'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
self.obj1 = obj1
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
print(obj1)
print(obj2)
print(obj3)
obj1.destroyed.connect(lambda: print('obj1被释放了'))
obj2.destroyed.connect(lambda: print('obj2被释放了'))
obj3.destroyed.connect(lambda: print('obj3被释放了'))
del self.obj1
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
self.obj2 = obj2
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
obj4.setParent(obj3) # 设置obj3为obj4的父对象,obj3销毁,obj4将自动销毁
print(obj1)
print(obj2)
print(obj3)
print(obj4)
obj1.destroyed.connect(lambda :print('obj1被释放了'))
obj2.destroyed.connect(lambda :print('obj2被释放了'))
obj3.destroyed.connect(lambda :print('obj3被释放了'))
obj4.destroyed.connect(lambda :print('obj4被释放了'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w1 = QWidget()
w1.setWindowTitle('第一个窗口')
w2 = QLabel(w1)
w2.setText('这是一个QLabel标签控件')
w2.move(50, 50)
b1 = QPushButton()
b1.setParent(w1)
b1.setText('这是一个QPushButton控件')
b1.move(50, 100)
w1.show()
w2.show()
sys.exit(app.exec_())
for sub_w in w1.findChildren(QLabel):
sub_w.setStyleSheet("background-color:cyan;")
del和deleteLater()
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
self.obj1 = obj1
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
obj4.setParent(obj3) # 设置obj3为obj4的父对象,obj3销毁,obj4将自动销毁
print(obj1)
print(obj2)
print(obj3)
print(obj4)
obj1.destroyed.connect(lambda :print('obj1被释放了'))
obj2.destroyed.connect(lambda :print('obj2被释放了'))
obj3.destroyed.connect(lambda :print('obj3被释放了'))
obj4.destroyed.connect(lambda :print('obj4被释放了'))
del obj2 # 这里只是删除了栈中的变量到对象的引用和变量名本身。并没有删除堆中的对象
# print(obj2) # 这里不能再使用obj2这个变量,因为del语句删除变量到对象的引用和变量名称本身
obj3.deleteLater() # 延迟删除堆中的对象
print('del obj2之后')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
del obj2之后
obj3被释放了
obj4被释放了
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
self.obj1 = obj1
obj2.setParent(obj1) # 设置obj1为obj2的父对象,obj1销毁,obj2将自动销毁
obj3.setParent(obj2) # 设置obj2为obj3的父对象,obj2销毁,obj3将自动销毁
obj4.setParent(obj3) # 设置obj3为obj4的父对象,obj3销毁,obj4将自动销毁
print(obj1)
print(obj2)
print(obj3)
print(obj4)
obj1.destroyed.connect(lambda :print('obj1被释放了'))
obj2.destroyed.connect(lambda :print('obj2被释放了'))
obj3.destroyed.connect(lambda :print('obj3被释放了'))
obj4.destroyed.connect(lambda :print('obj4被释放了'))
del obj2
obj3.deleteLater()
print('del obj2之后')
print('obj3.deleteLater之后',obj3)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
del obj2之后
obj3.deleteLater之后
obj3被释放了
obj4被释放了
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('deleteLater')
self.resize(980, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
bnt1 = QPushButton(self)
bnt1.setText('按钮1')
bnt1.move(100,100)
bnt2 = QPushButton(self)
bnt2.setText('按钮2')
bnt2.move(200, 100)
bnt3 = QPushButton(self)
bnt3.setText('按钮3')
bnt3.move(300, 100)
qw = QWidget(self)
bnt4 = QPushButton()
bnt4.setParent(qw)
bnt4.setText('按钮4')
bnt4.move(400, 100)
del bnt2 # del 仅仅是删除变量到对象的引用和变量名称本身,并没有删除对象本身
bnt3.deleteLater() # deleteLater() 直接删除对象
qw.deleteLater() # deleteLater() 直接删除父对象之后,子对象自动删除
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Windows()
w.show()
sys.exit(app.exec_())
python中的堆、栈和队列