【PyQt5】object属性
object属性
- QObject类的继承关系如下
- object属性
- 2024-09-19 后续补充,非会员-视频没讲那么多
- 代码实例
QObject类的继承关系如下
QObject
├── QThread
├── QTimer
├── QWidget
│ ├── QDialog
│ ├── QMainWindow
│ └── …
└── …
object属性
属性值:
- setObjectName 给一个Qt对象设置一个名称 objectName 获取一个Qt对象的名称
- setProperty(属性名称,值) 给一个Qt对象动态的添加一个属性与值 property(“属性名称”)
- 获取一个对象的属性值 dynamicPropertyNames()
- 获取一个对象中所有通过setProperty()设置的属性名称
父子对象操作:
-
setParnet(parent) # 设置付对象,只能存在一个
-
parent() # 获取付对象
-
children() # 获取所有子对象
-
findChild(参数1,参数2,参数3) # 查找子对象
-
findChildren(参数1,参数2,参数3) # 同findChild(),区别是返回所有查找到的子对象
参数1-类型,QObject或类型元组(QPushButton,QLabel);
参数2-setObjectName设置的值;
参数3-在所有对象中查到或在直接子对象中查找(Qt.FindDirectChildOnly(默认,递归查找子对象和子子对象),Qt.FindDirectChildOnly(只查找子对象)) -
metaObject() # 返回对象的元对象,用于访问对象的属性、信号和槽等元信息。
-
deleteLater() # 在事件循环中延迟删除对象。
-
moveToThread(QThread* thread) # 将对象移动到指定的线程。
2024-09-19 后续补充,非会员-视频没讲那么多
代码实例
import os
import sys
from PyQt5.QtCore import QObject
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QPushButton
base_dir = os.path.dirname(os.getcwd())
class Windows(QWidget):
def __init__(self):
super(Windows, self).__init__()
self.setWindowTitle("QObject学习")
self.resize(500, 500)
def setup_ui(self):
obj = QObject()
obj.setObjectName('QObject属性值,他的子类都适用')
print(obj.objectName())
# 设置属性值
obj.setProperty("level_debug", "DEBUG")
obj.setProperty("level_warring", "WARNING")
obj.setProperty("level_error", "ERROR")
# 获取属性值
print(obj.property("debug_level"))
# 获取所有属性值
print(
obj.dynamicPropertyNames()) # 返回一个列表 [PyQt5.QtCore.QByteArray(b'debug_level'), PyQt5.QtCore.QByteArray(b'warring_level'), PyQt5.QtCore.QByteArray(b'error_level')]
# 通过qss文件配置控件属性值
file_path = os.path.join(os.path.join(base_dir, "qss\\") + "QObject.qss")
with open(file_path, 'r') as f:
app.setStyleSheet(f.read())
def QlabelTest(self):
label0 = QLabel(self)
label0.setText("我是正常信息")
label0.move(20, 0)
label0.setObjectName('QObject') # 选择器设置标签字体
label1 = QLabel(self)
label1.setText("告警信息")
label1.move(20, 30)
label1.setObjectName('QObject') # 选择器设置标签字体
label1.setProperty("level_warning", "WARNING")
label2 = QLabel(self)
label2.setText("错误信息")
label2.move(20, 60)
label2.setObjectName('QObject')
label2.setProperty("level_error", "ERROR")
label3 = QLabel(self)
label3.setText("调试信息")
label3.move(20, 90)
label3.setObjectName('QObject')
label3.setProperty("level_debug", "DEBUG")
def ParentAndChild(self):
# 作用1、将按钮、标签等模块放到应用上展示
leabel1 = QLabel(self) # 创建时直接继承parent
leabel1.move(20, 30)
leabel1.setText("标签1")
leabel2 = QLabel(self) # 创建时直接继承parent
leabel2.move(20, 60)
leabel2.setText("标签2")
button = QPushButton()
button.setParent(self) # 用设置父项设置
button.setText("确认")
button.destroyed.connect(lambda: print("对象被释放了")) # 窗口退出后,button也同时被释放了
# 2、通过查找子项方式设置样式;给QLabel设置
for widget in self.findChildren(QLabel):
widget.setStyleSheet("background-color: green;")
def sing_slot(self):
self.obj = QObject()
self.obj.objectNameChanged.connect(lambda name: print("ObjectName改变了%s" % name)) # 监控信号变更
self.obj.setObjectName('QObject')
self.obj.objectNameChanged.disconnect() # 断开连接,信号改变不会在监控
self.obj.setObjectName('不显示')
if __name__ == '__main__':
app = QApplication(sys.argv)
windows = Windows()
# windows.setup_ui() # 属性设置
# 标签模块,属性值设置应用
# windows.QlabelTest()
# 测试父子对象关系
# windows.ParentAndChild()
# 信号与槽
windows.sing_slot()
# 展示
windows.show()
sys.exit(app.exec_())
学习不易,转载时不要收取费用,分享给需要的人