【Python_PySide6学习笔记(三十八)】基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton

embedded/2024/10/10 11:09:02/

基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton

    • 基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton
    • 前言
    • 正文
    • 1、Qt样式表
    • 2、设置Qt样式表
    • 3、tQCircularButton类
    • 4、使用示例

基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton

前言

在 GUI 界面开发中,我们经常会用到圆形按键指示灯来做提示,在 PyQt 中没有这样的类可以直接使用,所以本文介绍一种方法,基于 QPushButton 实现自定义的圆形按键指示灯类,最终实现如下图所示:在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

正文

1、Qt样式表

1.1 Qt样式表

PySide 中的 Qt 样式表(Qt Style Sheets,简称 QSS)是一种强大的机制,允许开发者自定义 Qt 应用程序中窗口小部件(widgets)的外观。QSS 的概念和语法在很大程度上受到 HTML 级联样式表(CSS)的启发,但专为 Qt 应用程序中的小部件设计。

1.2 样式属性

QSS 支持多种样式属性,以下是一些常用的属性:

  • 背景background-colorbackground-imagebackground-repeat 等,用于设置小部件的背景;
  • 边框borderborder-styleborder-widthborder-color 等,用于设置小部件的边框样式;
  • 字体font-familyfont-sizecolor 等,用于设置小部件中文本的字体和颜色;
  • 边距与填充marginpadding 等,用于设置小部件内容与其边框之间的空间。

2、设置Qt样式表

那想要实现圆形按键,就需要通过 Qt 样式表来对 QPushButton 对象进行设置,重点是 border-radius,这个关键属性,它决定了边框的圆角程度。

python">        # 设置形状为圆形 初始样式表,使用f-string来插入直径的一半作为border-radiusself.setStyleSheet(f"""QPushButton {{border-radius: {self.diameter // 2}px;padding: 0;}}""")

3、tQCircularButton类

那基于以上介绍,就可以得到自定义的圆形按键指示灯

python">from tModels.tResource import *
import qdarkstyle
from qdarkstyle.dark.palette import DarkPalette  # noqa: E402
from qdarkstyle.light.palette import LightPalette  # noqa: E402# 自定义圆形按钮指示灯,可以设置颜色;
class ctQCircularButton(QPushButton):# 构造函数def __init__(self, diameter=50, background_color="#8191B6", parent=None):super().__init__(parent)self.diameter = diameterself.background_color = background_color# 设置按钮的固定大小self.setFixedSize(self.diameter, self.diameter)# 设置按钮样式为圆形和深色模式self.f_recoverFunc()# 指示按键设置颜色函数def f_setColorFunc(self, is_active):"""function:  指示按键设置颜色函数in:  is_active: 布尔值,True为绿色,False为红色out:  Nonereturn:  Noneothers:  CircularButton Set Color Func"""color = "#00FF7F" if is_active else 'red'# 更新样式表,使用f-string来插入新的颜色self.setStyleSheet(f"""  QPushButton {{  border: 2px solid {color};  border-radius: {self.diameter // 2}px;  color: black;  background-color: {color};  padding: 0;  }}  """)# 设置按钮样式为圆形和深色模式def f_recoverFunc(self):"""function:  设置按钮样式为圆形和深色模式in:  Noneout:  Nonereturn:  Noneothers:  Set Button Style Func"""# 指示按键设置深色主题self.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyside6', palette=DarkPalette))# 设置形状为圆形 初始样式表,使用f-string来插入直径的一半作为border-radiusself.setStyleSheet(f"""QPushButton {{border-radius: {self.diameter // 2}px;padding: 0;}}""")

在以上代码中,引入了 qdarkstyle 的深色主题。

4、使用示例

python">from PySide6.QtWidgets import QPushButton, QApplication, QWidget, QVBoxLayout
import qdarkstyle
from qdarkstyle.dark.palette import DarkPalette  # noqa: E402
from qdarkstyle.light.palette import LightPalette  # noqa: E402class ctQCircularButton(QPushButton):# 构造函数def __init__(self, diameter=50, background_color="#8191B6", parent=None):super().__init__(parent)self.diameter = diameterself.background_color = background_color# 设置按钮的固定大小self.setFixedSize(self.diameter, self.diameter)# 设置按钮样式为圆形和深色模式self.f_recoverFunc()# 指示按键设置颜色函数def f_setColorFunc(self, is_active):"""function:  指示按键设置颜色函数in:  is_active: 布尔值,True为绿色,False为红色out:  Nonereturn:  Noneothers:  CircularButton Set Color Func"""color = "#00FF7F" if is_active else 'red'# 更新样式表,使用f-string来插入新的颜色self.setStyleSheet(f"""  QPushButton {{  border: 2px solid {color};  border-radius: {self.diameter // 2}px;  color: black;  background-color: {color};  padding: 0;  }}  """)# 设置按钮样式为圆形和深色模式def f_recoverFunc(self):"""function:  设置按钮样式为圆形和深色模式in:  Noneout:  Nonereturn:  Noneothers:  Set Button Style Func"""# 指示按键设置深色主题self.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyside6', palette=DarkPalette))# 设置形状为圆形 初始样式表,使用f-string来插入直径的一半作为border-radiusself.setStyleSheet(f"""QPushButton {{border-radius: {self.diameter // 2}px;padding: 0;}}""")class MainWindow(QWidget):def __init__(self):super().__init__()self.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyside6', palette=DarkPalette))self.initUI()def initUI(self):layout = QVBoxLayout()# 创建圆形按钮btn = ctQCircularButton(50)layout.addWidget(btn)# 示例:改变颜色btn.f_setColorFunc(True)  # 变为绿色# btn.f_setColorFunc(False)  # 变为红色,取消上面这行的注释来查看效果self.setLayout(layout)self.setWindowTitle('圆形按钮示例')self.setGeometry(100, 100, 200, 150)if __name__ == '__main__':app = QApplication([])ex = MainWindow()ex.show()app.exec()

也可以根据自己的需要进行其他设置,如边框的颜色、边框的粗细等。


http://www.ppmy.cn/embedded/124630.html

相关文章

【springboot】简易模块化开发项目整合Redis

接上一项目&#xff0c;继续拓展项目 1.整合Redis 添加Redis依赖至fast-demo-config模块的pom.xml文件中 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependenc…

Simplygon 使用笔记2

本文主收集一些实质开发中的一些问题, 大部分时候只能通过文档, 从个别的描述中找到问题的解决方法, 而这里希望能提供一些关键字, 方便具体的问题的分析 1. 怎么从spMaterial 材质中找到对应贴图的名字 这个可能通过获取该GetShadingNetwork的方式获取但问题是network可能是很…

AtCoder Beginner Contest 373(ABCDEF 题)视频讲解

A - September Problem Statement There are 12 12 12 strings S 1 , S 2 , … , S 12 S_1, S_2, \ldots, S_{12} S1​,S2​,…,S12​ consisting of lowercase English letters. Find how many integers i i i ( 1 ≤ i ≤ 12 ) (1 \leq i \leq 12) (1≤i≤12) satisfy …

达梦数据库索引内容介绍

1、索引概念 索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识&#xff08;例如&#xff1a;ROWID 等聚集索引键&#xff09;共同组成。在 DM 中&#xff0c;除了位图索引、位图连接索引、全文索引和空间索…

Redis:string类型

Redis&#xff1a;string类型 string命令设置与读取SETGETMSETMGET 数字操作INCRINCRBYDECRDECRBYINCRBYFLOAT 字符串操作APPENDSTRLENGETRANGESETRANGE 内部编码intembstrraw 在Redis中&#xff0c;字符串string存储的是二进制&#xff0c;以byte为单位&#xff0c;输入的二进…

基于SpringBoot图书馆预约与占座小程序【附源码】

效果如下&#xff1a; 首页界面 用户登录界面 查看座位界面 管理员登录界面 管理员主界面 座位分布信息界面 预约信息界面 研究背景 随着互联网技术的不断进步和智能手机的广泛普及&#xff0c;图书馆作为知识获取和学习的重要场所&#xff0c;其管理方式也在逐步向信息化和智…

PostgreSQL的扩展Citus介绍

PostgreSQL的扩展Citus介绍 Citus 是一个 PostgreSQL 的扩展&#xff0c;用于将 PostgreSQL 转变成一个分布式数据库集群。它使得用户可以利用多台机器来处理更大的数据集和更高的查询吞吐量&#xff0c;从而提升数据库的扩展性和性能。Citus 主要解决的是大规模数据处理和高并…

使用iTextPDF库时,设置文字为中文格式

在使用iTextPDF库时&#xff0c;设置文字为中文格式主要涉及选择合适的中文字体&#xff0c;并确保该字体能够正确渲染中文字符。由于iTextPDF的内置字体通常不支持中文&#xff0c;因此你需要加载一个支持中文的字体文件&#xff08;如TrueType字体&#xff0c;.ttf文件&#…