当前位置: 首页 > article >正文

【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()设置的属性名称

父子对象操作:

  1. setParnet(parent) # 设置付对象,只能存在一个

  2. parent() # 获取付对象

  3. children() # 获取所有子对象

  4. findChild(参数1,参数2,参数3) # 查找子对象

  5. findChildren(参数1,参数2,参数3) # 同findChild(),区别是返回所有查找到的子对象
    参数1-类型,QObject或类型元组(QPushButton,QLabel);
    参数2-setObjectName设置的值;
    参数3-在所有对象中查到或在直接子对象中查找(Qt.FindDirectChildOnly(默认,递归查找子对象和子子对象),Qt.FindDirectChildOnly(只查找子对象))

  6. metaObject() # 返回对象的元对象,用于访问对象的属性、信号和槽等元信息。

  7. deleteLater() # 在事件循环中延迟删除对象。

  8. 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_())

学习不易,转载时不要收取费用,分享给需要的人


http://www.kler.cn/a/311551.html

相关文章:

  • 【考研数学:高数2】数列极限
  • Ubuntu 的 ROS 操作系统turtlebot3环境搭建
  • java---认识异常(详解)
  • PCL 点云拟合 Ransac拟合圆柱
  • 双向链表用法详解
  • 国标GB28181设备管理软件EasyGBS国标GB28181视频平台:GB/T28181中的流类型
  • Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
  • 性格类型识别系统源码分享
  • DTD 实体
  • 【HTTP】HTTP报文格式和抓包
  • C++初阶:STL详解(五)——vector的模拟实现
  • 【JOIN 详解】SQL连接全面解析:从基础到实战
  • PostgreSQL主从切换测试
  • 使用BGP及静态路由方式实现链路冗余和ByPass
  • C:字符串函数(完)-学习笔记
  • 北斗盒子TD20——水上作业的安全防线,落水报警守护生命
  • React 中的延迟加载
  • 音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现
  • AUTOSAR_EXP_ARAComAPI的5章笔记(6)
  • 高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?
  • 组件封装有哪些注意事项—面试常问优美回答
  • 2024网站建设比较好的公司都有哪些
  • re题(35)BUUCTF-[FlareOn4]IgniteMe
  • Docker Redis 7.2.3 部署
  • Spark实操学习
  • 集合框架底层使用了什么数据结构