PyQt6 基类QObject类介绍以及应用

2023-12-22 05:52

本文主要是介绍PyQt6 基类QObject类介绍以及应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

锋哥原创的PyQt6视频教程:

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计51条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库QTDesigner安装与配置、第3讲 PyQt6第一个程序HelloWorld实现等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV11C4y1P7fj/

QObject是Qt库中最重要的类之一。作为所有Qt类的基类,QObject提供了信号槽机制、对象树、动态属性、元对象系统、事件处理机制、线程安全、国际化等许多重要特性,这些特性可以帮助开发者轻松实现模块间通信、组件化、程序设计以及事件处理等方面的功能。

在Qt框架下编程,不管用不用到Qt的特性,都推荐自定义类继承QObject类,这样在需要的时候,就可以随时使用Qt基于QObject类提供的各种特性和机制,而且可以让自定义的类很好地融入到Qt的框架之中。

具体来讲,QObject主要实现了以下特性:

1.信号槽机制:QObject通过定义信号(signal)和槽(slot)来实现对象间的通信。当信号被触发时,与该信号相对应注册的槽函数将会被自动调用。一个信号可以连接到多个槽函数上,也可以将多个信号连接到同一个槽函数。信号/槽机制是Qt中最强大和最独特的功能之一,可以帮助开发者在不同的对象之间进行通信,处理事件等。

2.对象树:QObject支持管理对象树结构的方式。它允许对象包含一个父对象和零个或多个子对象。当父对象被删除时,其所有子对象也会被自动销毁。这个特性使得我们在Qt程序中组织和管理QObject及其子类之间的依赖关系变得更容易。

3.动态属性:QObject支持添加动态属性。这意味着,除了一组已经存在的静态属性之外,每个对象实例还可以动态地创建和设置新的属性,这些属性不需要在编译器层面进行定义和声明。这种灵活性使得QObject能够适应各种场景的需求。

4.元对象系统:元对象系统(Meta-Object System)是QObject的另一个重要特性。它为每个QObject和其子类提供运行时类型信息,包括对象的类名、属性、方法和信号等信息,这些信息都可以在运行时被访问或者修改。元对象系统赋予了Qt框架独特的能力,例如能够自动序列化和反序列化对象以及其成员等,同时也是实现Qt信号槽机制的关键技术。

5.事件处理机制:QObject支持通过发送和接收事件来实现对象间的通信。Qt中的事件是指某种对象发生的一些动作或状态变化,通常包含一个事件类型和一些参数。QObject可以捕获并处理各种类型的事件,也可以派发(dispatch)事件给其他对象进行处理。

6.线程安全:QObject被设计为线程安全的基础构建单元。这意味着QObject默认可以在多线程环境下直接使用,而无需考虑同步问题。但是,如果需要在不同线程之间交互对象,还是需要小心地设计和管理线程模型。

7.国际化:QObject提供国际化(Internationalization / i18n)函数,帮助开发人员使应用程序能够方便地本地化,支持多语言切换。i18n函数提供消息翻译,日期和时间格式化以及数字格式转换等功能。

QObject setObjectName()方法 设置对象名称,理论上不可以重复。我们再给控件设置样式的时候,可以用到这个对象属性。

UI生成测试代码:

from PyQt6 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(400, 300)self.label = QtWidgets.QLabel(parent=Form)self.label.setGeometry(QtCore.QRect(50, 60, 53, 15))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(parent=Form)self.label_2.setGeometry(QtCore.QRect(50, 100, 53, 15))self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(parent=Form)self.label_3.setGeometry(QtCore.QRect(50, 140, 53, 15))self.label_3.setObjectName("label_3")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.label.setText(_translate("Form", "信息1"))self.label_2.setText(_translate("Form", "信息2"))self.label_3.setText(_translate("Form", "信息3"))

label.qss代码:

QLabel#label_2{color:red;font-size:18px;
}

Main测试代码:

"""python加载ui文件作者 : 小锋老师官网 : www.python222.com
"""
import sysfrom PyQt6.QtWidgets import QApplication, QLabel
from PyQt6 import uicif __name__ == '__main__':app = QApplication(sys.argv)# 加载qss样式with open("label.qss", "r") as f:app.setStyleSheet(f.read())ui = uic.loadUi("./基类QObject类介绍以及应用.ui")label: QLabel = ui.labelui.show()sys.exit(app.exec())

setProperty()方法可以给对象添加属性以及属性值。我们qss样式里面可以细化指定属性来设置样式,来实现设置归类样式。

qss改下:

QLabel[level="error"]{color:red;font-size:18px;
}
QLabel[level="warning"]{color:blue;font-size:18px;
}

Main测试代码:

"""python加载ui文件作者 : 小锋老师官网 : www.python222.com
"""
import sysfrom PyQt6.QtWidgets import QApplication, QLabel
from PyQt6 import uicif __name__ == '__main__':app = QApplication(sys.argv)# 加载qss样式with open("label.qss", "r") as f:app.setStyleSheet(f.read())ui = uic.loadUi("./基类QObject类介绍以及应用.ui")label: QLabel = ui.labellabel_2: QLabel = ui.label_2label_3: QLabel = ui.label_3label.setProperty("level", "warning")label_2.setProperty("level", "error")label_3.setProperty("level", "error")ui.show()sys.exit(app.exec())

这篇关于PyQt6 基类QObject类介绍以及应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/522786

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总