PYQT5学习笔记04——QObject对象和属性名称设置API以及对应案例

news2024/11/16 8:30:50

一、QObject对象和属性名称设置API

  简单介绍一下PyQt5最上层父类QObject的一些属性方法,并给出具体的使用过程示例。

1、setObjectName(“唯一名称”)和objectName()

  setObjectName方法的作用是给Qt对象设置一个名称,一般这个名称是唯一的,这个名称被当成对象的ID来使用。objectName方法的作用是获取设置的对象名称,示例代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/4/22
"""
from PyQt5.Qt import *


class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("QObject的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        self.QObject对象名称和属性的操作()

    def QObject对象名称和属性的操作(self):
        # 测试API
        # 1、设置对象名称和获取对象名称(对象名称即为id,可以用id选择器设置样式)
        obj = QObject()
        obj.setObjectName("notice")
        print(obj.objectName())


if __name__ == '__main__':  # 只有右键启动才会执行该方法,被人调用Menu模块的话,不会执行该方法,方便编写人员测试使用
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

  具体效果如下:
在这里插入图片描述

2、setProperty(“属性名称”, 值 )和property(“属性名称”)和dynamicPropertyNames()

  setProperty方法的作用是给一个Qt对象动态的添加一个属性和值,property方法的作用是根据属性名称获取值,dynamicPropertyNames方法的作用是获取一个对象中所有通过setProperty设置的数下名称,代码示例如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/4/22
"""
from PyQt5.Qt import *


class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("QObject的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        self.QObject对象名称和属性的操作()


    def QObject对象名称和属性的操作(self):
        # ***********************测试API**************************开始
        # # 设置键值对和获取键值对
        obj = QObject()
        obj.setProperty("notice_level", "error")
        obj.setProperty("notice_level2", "warning")
        #
        print(obj.property("notice_level"))
        #
        # # 获取所有的键
        print(obj.dynamicPropertyNames())

       


if __name__ == '__main__':  # 只有右键启动才会执行该方法,被人调用Menu模块的话,不会执行该方法,方便编写人员测试使用
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

  具体效果如下:
在这里插入图片描述

二、Qt对象名称和属性值应用案例

  刚刚演示过一遍Qt对象名称和属性值的代码示例之后,可能大家还有些模糊,这两个东西到底有什么用?接着我们就用一个案例来告诉大家这用什么用!!

  在进行案例之前,我们先来了解一下qss样式表,如果学过前端的同学可能会觉得怎么和css样式表这么像,其实qss样式表就是遵循的css样式表的规范来编写的。

  我们来看一下普通的没有加任何样式的GUI组件长什么样子,代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/4/22
"""
from PyQt5.Qt import *


class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("QObject的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        self.QObject对象名称和属性的操作()

    def QObject对象名称和属性的操作(self):
        # **********************案例演示***************************开始

        label = QLabel(self)
        label.setText("社会我唐哥")
        
        label2 = QLabel(self)
        label2.setText("人狠话不多")
        label2.move(200, 200)
        
        label3 = QLabel(self)
        label3.setText("xxxx")
        label3.move(50, 50)
        
        label4 = QLabel(self)
        label4.setText("ooooo")
        label4.move(300, 300)



if __name__ == '__main__':  # 只有右键启动才会执行该方法,被人调用Menu模块的话,不会执行该方法,方便编写人员测试使用
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

  效果如下:
在这里插入图片描述

  接着我们加一句qss代码,给label设置一下字体大小和颜色,代码如下:

# 设置控件样式
label.setStyleSheet("font-size: 20px; color: red;")

  效果图如下:
在这里插入图片描述

  我们这是在程序代码里面直接设置样式,这样的话耦合性太高, 我们可以用一个文件来写qss代码,然后程序中读取该文件内容即可降低耦合性,创建一个QObject.qss文件,qss代码如下:

/*对所有QLabel组件都生效生效*/
QLabel{
    font-size: 20px;
    color: red;
}

  读取qss文件的代码如下(因为可能全局都会使用,所以我们直接用qApp设置,但是也可以用局部app设置,看自己需要,记得把原来的label设置样式的语句注释掉):

with open("QObject.qss", "r", encoding='utf-8') as f:
    qApp.setStyleSheet(f.read())

  效果图如下:
在这里插入图片描述

  但是我们发现所有的label标签都设置上了样式,如果我们某个标签不想设置样式那应该怎么办呢?现在就轮到对象名称出马了,之前说过对象名称就像是对象ID,相当于css中的ID选择器,这下大家应该懂了,我们将qss样式表设置成只有ID为notice的label标签才能使用,然后给label加上notice名称,代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/4/22
"""
from PyQt5.Qt import *


class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("QObject的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        # self.QObject继承结构测试()
        self.QObject对象名称和属性的操作()

    def QObject对象名称和属性的操作(self):
        # **********************案例演示***************************开始

        # 读取qss样式表,设置在全局qApp对象中(虽然该程序用的是app,但是设置在qApp中也能生效)
        with open("QObject.qss", "r", encoding='utf-8') as f:
            qApp.setStyleSheet(f.read())

        label = QLabel(self)
        label.setObjectName("notice")
        label.setText("社会我唐哥")

        label2 = QLabel(self)
        label2.setText("人狠话不多")
        label2.move(200, 200)

        label3 = QLabel(self)
        label3.setText("xxxx")
        label3.move(50, 50)

        label4 = QLabel(self)
        label4.setText("ooooo")
        label4.move(300, 300)


if __name__ == '__main__':  # 只有右键启动才会执行该方法,被人调用Menu模块的话,不会执行该方法,方便编写人员测试使用
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
QLabel#notice{
    font-size: 20px;
    color: red;
}

  效果图如下:
在这里插入图片描述

  现在只有label才会改变样式。

  除了用对象名称来控制样式具体应用在哪个控件上之外,还可以用属性名称来控制,qss代码如下:

/*只有id(ObjectName)为notice的QLabel组件才能生效*/
QLabel#notice {
    font-size: 20px;
    color: gray;
    border: 1px solid gray;
    border-radius: 8px;
}

/*只有id(ObjectName)为notice,并且属性值为notice_level="normal"的QLabel组件才能生效*/
QLabel#notice[notice_level="normal"] {
    color: green;
    border-color: green;
}

QLabel#notice[notice_level="warning"] {
    color: yellow;
    border-color: yellow;
}

QLabel#notice[notice_level="error"] {
    color: red;
    border-color: red;
}

  程序代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/4/22
"""
from PyQt5.Qt import *


class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("QObject的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        self.QObject对象名称和属性的操作()

    def QObject对象名称和属性的操作(self):
        # **********************案例演示***************************开始

        # 读取qss样式表,设置在全局qApp对象中(虽然该程序用的是app,但是设置在qApp中也能生效)
        with open("QObject.qss", "r", encoding='utf-8') as f:
            qApp.setStyleSheet(f.read())

        label = QLabel(self)
        label.setObjectName("notice")
        label.setProperty("notice_level", "warning")
        label.setText("社会我唐哥")

        label2 = QLabel(self)
        label2.setObjectName("notice")
        label2.setText("人狠话不多")
        label2.move(200, 200)

        label3 = QLabel(self)
        label3.setObjectName("notice")
        label3.setProperty("notice_level", "normal")
        label3.setText("xxxx")
        label3.move(50, 50)

        label4 = QLabel(self)
        label4.setObjectName("notice")
        label4.setProperty("notice_level", "error")
        label4.setText("ooooo")
        label4.move(300, 300)

        # 设置控件样式
        # label.setStyleSheet("font-size: 20px; color: red;")
        # *************************************************结束


if __name__ == '__main__':  # 只有右键启动才会执行该方法,被人调用Menu模块的话,不会执行该方法,方便编写人员测试使用
    import sys
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

  效果如下:
在这里插入图片描述

  所以对象名称和属性值的具体应用主要是用在控制qss样式表上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…

【Java】Eclipse如何创建java项目并运行

前面Eclipse、JDK的安装与JDK环境变量配置好了之后,开始进行基本的使用 一、创建java项目并运行 1、先打开Eclipse IDE 2、创建项目 点击左上角的File—>New—>Project,这样就可以新建一个Java的项目了。也就是说,在Eclipse中&#…

设置ubuntu开机启动脚本

一、新建xx-setpower.service文件 sudo gedit /etc/systemd/system/xx-setpower.service [Unit] DescriptionXX SetPower Service Afternetwork.target Wantsnetwork.target[Service] Typesimple PIDFile/run/take_up_boot.pid ExecStart/usr/bin/take_up_boot.sh Restarton-…

二进制码与格雷码的相互转换原理与Verilog实现

二进制码与格雷码的相互转换原理与Verilog实现 一、写在前面二、二进制码与格雷码的相互转换2.1 二进制码转格雷码原理2.2 异或运算的特性2.3 格雷码转二进制码原理 三、二进制码与格雷码相互转换的Verilog实现四、仿真验证五、写在后面 一、写在前面 二进制码是一种基于二进制…

RibbitMQ之RabbitMQ的介绍与安装

RabbitMQ的介绍与安装 1. MQ 的相关概念1.1 MQ 的概念1.2 MQ 的作用1.3 MQ 的分类1.3.1 ActiveMQ1.3.2 Kafka1.3.3 RocketMQ1.3.4 RabbitMQ 1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 RabibitMQ 的四大核心2.3 RabbitMQ 的核心部分2.4 RabbitMQ 名词介绍2.5 安装 Rabbi…

数学建模第五天:数学建模算法篇之层次分析法AHP

目录 一、前言 1、例题 2、层次分析法用途 二、层次分析法步骤 1、建立层次结构图 2、构造两两比较矩阵 3、确定相对权重向量 ①特征根法 ②和法 4、一致性检验 5、计算层次总排序权值和一致性检验 一、前言 1、例题 有大学生刘昊、小王、阿三、蛋仔四人&#xff0…

闪电加密和隐藏加密文件夹忘记密码怎么办?

闪电加密和隐藏加密是文件夹加密超级大师的两种文件夹加密类型,它们都拥有超快的加密算法,可以瞬间加密超大文件夹。那么这两种文件夹加密类型忘记密码该怎么办呢?下面我们一起来了解一下吧。 闪电加密和隐藏加密文件夹找回密码 首先&#x…

HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂

前置知识 先来看看HashMap中的成员属性 解释: size当前的容器中Entry的数量,也就是当前K-V的数量loadFactory装载因子,用来衡量HashMap满的程度,loadFactory的默认值是0.75threshold临界值,当实际KV数量超过threshol…

ChatGPT实现语义分析情感分类

语义分析情感分类 我们从开源社区找到了中科院谭松波博士整理的携程网酒店评论数据集(https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv)。一共七千余条数据,包括 label 和 review …

Domino中的时间日期格式设置

大家好,才是真的好。 今天我们谈管理运维问题,相对于前面的技术来说,会简单很多。 就是Domino服务器运行时的时间日期显示问题。这和你的邮件、应用等里面的文档时间日期也有关系。 简单来说,在默认的设置情况下,Do…

java——最小的K个数

题目链接 牛客在线oj题——最小的K个数 题目描述 给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。 数据范围:0≤k,n≤10000&…

【刷题之路】LeetCode 206. 反转链表

【刷题之路】LeetCode 206. 反转链表 一、题目描述二、解题1、方法1——改变指针方向1.1、思路分析1.2、代码实现 2、方法2——头插到新链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接: 206. 反转链表 题目描述: 给你单链表的头节点 head &…

4月26号软件更新资讯合集....

Tpflow V7.0.2,PHP 工作流引擎新版发布 ​欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统,基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力,让系统更具可用性,智能应用型…

设计模式天花板,详解23种设计模式+7大设计原则

这份文档完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深…

速速报名| 米尔将精彩亮相2023 STM32中国峰会暨粉丝狂欢节

STM32峰会已成功举办五届,第六届将于今年5月12日-13日在深圳重磅回归!往年,米尔电子都作为官方合作伙伴,出席演讲并展出公司配套的核心板和开发板。 今年,STM32峰会更是集齐了值得你「点赞、收藏、转发」的一键三连精…

漫画 | Linux之父:财务自由以后,我失眠了!

前言:今年是Linux诞生的30周年! 1991年的8月, Linus在新闻组中公布了他正在开发的一个免费的操作系统,这也是以后风靡世界的Linux操作系统的雏形。 今天翻到这篇漫画,看到Linux的诞生过程,很是感慨&#x…

FPGA实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统 FPGA UDP 方案本 FPGA 10G UDP 方案(牛逼)10G Ethernet 框图10G Ethernet 发送解析10G Ethernet 接收解析10G Ethernet 寄存器配置10G Ethernet UI 配置 4、vivado工程详解5、上板调试验证并演示ping功能测试数据收发测…

新手必看:蓝牙耳机什么牌子的好用?2023年蓝牙耳机排名

上班通勤、健身运动、游戏娱乐都离不开蓝牙耳机,蓝牙耳机市场这几年逐渐饱和,涌现了大量的品牌,蓝牙耳机什么牌子的好用成为热议话题,新手们在挑选时会参考排行榜,小编接下来将盘点2023年蓝牙耳机排名。 ●JEET Air 2蓝…

【服务器数据恢复】HP MSA存储raid5数据恢复案例

服务器故障环境: HP MSA某型号存储,8块SAS的硬盘组建RAID5磁盘阵列,其中包括1块热备盘。故障存储中基于该RAID组的LUN均分配给HP-Unix小机使用,上层做的LVM逻辑卷,存储的数据为Oracle数据库及OA服务端。 服务器故障&a…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后,一个在实际编程开发过程中非常重要的问题是第三方库添加,然而Python默认的源网络速度有点慢,因此,我们常常需要做的是更换Pycharm的安装源。 在当前最新版(2022.03版&…