赞
踩
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时,该对象生命就结束了。
- <PyQt5.QtCore.QObject object at 0x000001921800A670>
- <PyQt5.QtCore.QObject object at 0x000001921800A700>
- <PyQt5.QtCore.QObject object at 0x000001921800A790>
- <PyQt5.QtCore.QObject object at 0x000001921800A820>
- 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 = QWidget()
- w2.setWindowTitle('第二个窗口')
-
- w1.show()
- w2.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_())

- <PyQt5.QtCore.QObject object at 0x00000298ECB9A670>
- <PyQt5.QtCore.QObject object at 0x00000298ECB9A700>
- <PyQt5.QtCore.QObject object at 0x00000298ECB9A790>
- <PyQt5.QtCore.QObject object at 0x00000298ECB9A820>
- 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_())

- <PyQt5.QtCore.QObject object at 0x000002635E22A670>
- <PyQt5.QtCore.QObject object at 0x000002635E22A700>
- <PyQt5.QtCore.QObject object at 0x000002635E22A790>
- <PyQt5.QtCore.QObject object at 0x000002635E22A820>
- del obj2之后
- obj3.deleteLater之后 <PyQt5.QtCore.QObject object at 0x000002635E22A790>
- 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中的堆、栈和队列
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。