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

PySide6 GUI 学习笔记——常用类及控件使用方法(常用控件调色板QPalette)

文章目录

    • 1. 概述
    • 2. 颜色角色表(ColorRole)
    • 3. 常用方法
    • 4. Python示例
    • 5. 关键特性说明
    • 6. 最佳实践

1. 概述

QPalette管理Qt控件的颜色方案,它的颜色组ColorGroup包含3个状态:

• Active:激活状态,获得焦点;
激活状态

• Inactive:非激活状态,失去焦点;
非激活状态

• Disabled:失效状态,控件不可用。
失效状态

通过修改调色板可实现应用程序主题的统一管理。

2. 颜色角色表(ColorRole)

枚举值描述
Window窗口背景色
WindowText窗口前景色(文本)
Base文本输入控件背景色
Text与Base搭配的文本颜色
Button按钮背景色
ButtonText按钮文本颜色
Highlight选中项背景色
HighlightedText选中项文本颜色
ToolTipBase工具提示背景色
ToolTipText工具提示文本颜色
BrightText高对比度文本色
Link超链接颜色
LinkVisited已访问链接颜色
AlternateBase交替行背景色
PlaceholderText输入占位符文本颜色
Shadow阴影颜色

(完整枚举共21个角色,此处列出常用15个,详细内容可参考官方文档)

3. 常用方法

方法参数返回类型描述
color()ColorGroup, ColorRoleQColor获取颜色值
brush()ColorGroup, ColorRoleQBrush获取画刷对象
setColor()ColorRole, QColorvoid设置颜色(所有组)
setBrush()ColorGroup, ColorRole, QBrushvoid设置指定组画刷
currentColorGroup()-ColorGroup获取当前颜色组
isEqual()ColorGroup, ColorGroupbool比较颜色组是否相同

4. Python示例

import sys
from PySide6.QtWidgets import QApplication, QWidget, QPushButton
from PySide6.QtGui import QPalette, QColor
from PySide6.QtCore import Qtclass DemoWindow(QWidget):def __init__(self):super().__init__()# 创建按钮self.btn = QPushButton("测试按钮", self)self.btn.setGeometry(50, 50, 120, 40)# 获取当前调色板palette = self.palette()# 修改颜色角色palette.setColor(QPalette.Button, QColor("#009688"))  # 按钮背景palette.setColor(QPalette.ButtonText, QColor("white"))  # 按钮文本palette.setColor(QPalette.Highlight, QColor("#FF5722"))  # 选中背景# 应用调色板self.setPalette(palette)self.resize(200, 150)self.setWindowTitle("调色板演示")if __name__ == "__main__":app = QApplication(sys.argv)window = DemoWindow()window.show()sys.exit(app.exec())

运行效果

import sys
from PySide6.QtWidgets import QApplication, QWidget, QLabel
from PySide6.QtGui import QFont, QColor, QPalette
from random import randint, seedclass SetPalette(QWidget):def __init__(self,parent=None):super().__init__(parent)self.setGeometry(200,200,1200,500)  #设置窗口尺寸self.setWindowTitle("设置调色板实例")self.createLabels()  #调用函数self.setLabelColor()  #调用函数self.getLabelColorRGB()  #调用函数def createLabels(self):  #创建10个标签self.labels = list()font = QFont("黑体",pointSize=20)string = "Nice to meet you! 很高兴认识你!"for i in range(10):label = QLabel(self)  #在窗口上创建标签控件label.setGeometry(5,50*i,1200,40)  #标签位置和尺寸label.setText(str(i)+': '+string)  #设置标签文字label.setFont(font)  #设置标签文字的字体self.labels.append(label) #标签列表def setLabelColor(self):seed(12)for label in self.labels:colorBase = QColor(randint(0,255), randint(0,255), randint(0,255))  #定义颜色colorText = QColor(randint(0,255), randint(0,255), randint(0,255))  #定义颜色palette = label.palette()# palette.setColor(palette.Active,palette.Window,colorBase)  #定义背景色# palette.setColor(palette.Active,palette.WindowText,colorText) #定义前景色palette.setColor(QPalette.ColorGroup.Active,QPalette.ColorRole.Window,colorBase)  #定义背景色palette.setColor(QPalette.ColorGroup.Active,QPalette.ColorRole.WindowText,colorText) #定义前景色label.setAutoFillBackground(True)  #设置背景自动填充label.setPalette(palette)  #设置调色板def getLabelColorRGB(self):  #获取标签前景颜色和背景颜色RGB值for label in self.labels:r,g,b,a = label.palette().window().color().getRgb()  #获取背景颜色的RGB值rT,gT,bT,a = label.palette().windowText().color().getRgb()#获取文字颜色的RGB值text = (f"{label.text()}背景颜色:{r} {g} {b} 文字颜色:{rT} {gT} {bT}")label.setText(text)
if __name__ == '__main__':app = QApplication(sys.argv)window = SetPalette()window.show()sys.exit(app.exec())

获得焦点时:
获得焦点时

失去焦点时:
失去焦点时

5. 关键特性说明

• 颜色继承:未明确设置的角色会自动继承关联颜色

• 隐式共享:调色板对象采用写时复制机制,高效传递

• 平台适配:建议基于QGuiApplication.palette()修改而非创建新调色板

• 状态管理:Disabled组自动应用50%透明度混合效果

6. 最佳实践

  • (1) 优先使用颜色角色而非固定颜色值
  • (2) 修改Inactive组会影响非活动窗口外观
  • (3) 使用resolve()方法合并多个调色板配置
  • (4) 复杂样式建议使用QSS+调色板组合方案

注意:某些系统主题(如Windows/Mac原生主题)可能覆盖调色板设置,建议在应用初始化时设置QApplication.setPalette()保证一致性。

http://www.xdnf.cn/news/557497.html

相关文章:

  • Linux X86平台安装ARM64交叉编译器方法
  • 如何在 AOSP 中判断一个源文件属于哪个模块(以 CameraService 为例)
  • 首次中医知识问答模型微调
  • CSS display有几种属性值
  • 深入理解 Python 中的几种方法:实例方法、类方法、静态方法与特殊方法
  • leetcode 162. Find Peak Element
  • python新手学习笔记①
  • Linux探秘:驾驭开源,解锁高效能——基础指令
  • Git命令使用全攻略:从创建分支到合并的完整流程
  • 大模型高效微调技术全面解析:从PEFT原理到实战应用
  • 项目进度延误,如何按时交付?
  • 预训练模型:深度学习的通用特征引擎
  • Greenplum数据库维护篇之常用操作指导
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(十八)
  • Windows逆向工程提升之IMAGE_DOS_HEADER
  • 定时任务延迟任务
  • linux内核编译学习笔记
  • Java异常处理与File类终极指南
  • 【基础知识】SPI协议的种类及异同
  • 数据库 1.0.1
  • DAY28类
  • MYSQL备份恢复知识:第四章:备份锁
  • 【优秀三方库研读】在 quill 开源库中为什么封装 safe_fwrite,而不是直接使用系统 fwrite
  • MySQL中添加一个具有创建数据库权限的用户
  • Java并发进阶系列:深度讨论jdk1.8 ConcurrentHashMap并发环境下transfer方法桶位分配过程
  • C/C++ Select Poll Epoll 多路转接
  • python -> matplotlib简单用法
  • Unity3D仿星露谷物语开发47之砍树时落叶特效
  • Wan2.1 加速推理方法
  • 使用cursor自动生成前后端分离的web应用程序