百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python入坑系列-pyside6桌面编程之QColor添加色彩彰显个性

off999 2024-09-26 16:20 45 浏览 0 评论

通过本文章,你可以掌握以下内容:

  1. Pyside6 Color颜色模型
  2. Pyside6 Color色系介绍
  3. Pyside6更换系统主题

1、Pyside6 Color颜色模型

颜色通常以RGB(红色、绿色和蓝色)分量的形式指定,但也可以以HSV(色调、饱和度和亮度)和CMYK(青色、品红、黄色和黑色)分量的形式指定。此外,还可以使用颜色名称来指定颜色。颜色名称可以是SVG 1.0颜色名称中的任何一个

QColor构造函数基于RGB值创建颜色。要基于HSV或CMYK值创建QColor,分别使用toHsv()和toCmyk()函数。这些函数返回使用所需格式的颜色副本。此外,静态函数fromRgb()、fromHsv()和fromCmyk()可以从指定的值创建颜色。或者,可以使用convertTo()函数将颜色转换为任一三种格式(返回所需格式的颜色副本),或使用setRgb()、setHsv()和setCmyk()函数改变此颜色的格式。spec()函数指明颜色是如何被指定的。

可以通过向fromString()函数传递一个RGB字符串(如“#112233”)、一个ARGB字符串(如“#ff112233”)或一个颜色名称(如“blue”)来设置颜色。颜色名称取自SVG 1.0颜色名称。name()函数以“#000000”的格式返回颜色的名称。也可以使用setRgb()、setHsv()和setCmyk()设置颜色。要获取更亮或更暗的颜色,分别使用lighter()和darker()函数。

isValid()函数指示QColor是否完全合法。例如,RGB值超出范围的RGB颜色是非法的。出于性能原因,QColor大多忽略非法颜色,因此,使用无效颜色的结果是未定义的。颜色组件可以单独检索,例如使用red()、hue()和cyan()。

颜色组件的值也可以一次性使用getRgb()、getHsv()和getCmyk()函数检索。使用RGB颜色模型,颜色组件还可以通过rgb()访问。

有几个相关的非成员函数:QRgb是代表RGB值三元组(r, g, b)的unsigned int的类型定义。注意,它也可以保存alpha通道的值(更多信息,请参见Alpha-Blended Drawing部分)。qRed()、qBlue()和qGreen()函数返回给定QRgb值的相应组件,而qRgb()和qRgba()函数基于给定的组件值创建并返回QRgb三元组。最后,qAlpha()函数返回提供的QRgb的alpha组件,qGray()函数基于给定值计算并返回一个灰度值。QColor是平台和设备独立的。QColormap类将颜色映射到硬件上。

预定义颜色

命名空间中有 20 个预定义QColor对象QColorConstants,包括黑色、白色、主要和次要颜色、这些颜色的较暗版本,以及三种灰度。此外,QColorConstants.Svg命名空间为标准SVG颜色关键字名称定义了QColor对象。

QColorConstants.Color0、QColorConstants.Color1和QColorConstants.Transparent颜色用于特殊目的。QColorConstants.Color0(零像素值)和QColorConstants.Color1(非零像素值)是在QBitmaps中绘图的特殊颜色。使用QColorConstants.Color0绘制将位图位设置为0(透明;即背景),而使用QColorConstants.Color1绘制将位设置为1(不透明;即前景)。QColorConstants.Transparent用于指示透明像素。使用此值绘制时,将使用适合正在使用的底层像素格式的像素值。

HSV 颜色模型

RGB 模型是面向硬件的。它的表现接近大多数显示器的显示。相比之下,HSV 以更适合人类对颜色感知的方式表示颜色。例如,“强于”、“暗于”和“相反”的关系在 HSV 中很容易表达,但在 RGB 中很难表达。

HSV 与 RGB 一样,具有三个组成部分

  • H(色调),如果颜色是彩色(不是灰色),则在 0 到 359 范围内;如果颜色是灰色,则毫无意义。它代表大多数人熟悉的色轮上的度数。红色为 0(度),绿色为 120,蓝色为 240。
  • S代表饱和度,范围是0到255,它越大,颜色越强。浅灰色的饱和度接近 0;非常强烈的颜色饱和度接近 255。
  • V 代表颜色,范围为 0 到 255,代表颜色的明度或亮度。 0 为黑色; 255 尽可能远离黑色。

2、Pyside6 Color色系介绍

色彩是视觉设计的重要组成部分,它不仅能影响美观性,还能影响情绪和行为。由于桌面程序默认组件的色彩比较单一,需要开发通过了解色彩系统给组件配色,给用户带来视觉冲击。

下面是自定义颜色标签,部分示例会使用到该类

import re
from PySide6.QtCore import Qt
from PySide6.QtGui import QPalette, QColor
from PySide6.QtWidgets import QLabel
class ColorLable(QLabel):
    def __init__(self, text, color=None, fontcolor="white", align=Qt.AlignCenter):
        """接收color参数为:按颜色名称(如 "red")、十六进制颜色代码(如 "#000000")以及RGB值(如 rgb(83, 168, 255))"""
        super(ColorLable, self).__init__()
        self.setAlignment(align)
        self.setStyleSheet(f"color:{fontcolor}")
        self.setAutoFillBackground(True)
        if color is None:
            color = text
        rgb_match = re.match(r'rgb\((\d+),\s*(\d+),\s*(\d+)\)', color)
        if rgb_match:
            r, g, b = map(int, rgb_match.groups())
            qcolor = QColor(r, g, b)
        else:
            qcolor = QColor(color)
        r, g, b, _ = qcolor.getRgb()
        hex_str_upper = qcolor.name().upper()
        if color is text:
            self.setText(f"{color}<br>rgb({r}, {g}, {b})<br>{hex_str_upper}")
        elif text == "":
            self.setText(f"rgb({r}, {g}, {b})<br>{hex_str_upper}")
        else:
            self.setText(f"{color}<br>rgb({r}, {g}, {b})<br>{hex_str_upper}")
        palette = self.palette()
        palette.setColor(QPalette.Window, qcolor)
        self.setPalette(palette)

原色

原色是不能通过混合其他颜色来创建的颜色。在传统的色彩理论中,原色包括红色、黄色和蓝色。在光的颜色混合(如屏幕显示)中,原色被认为是红色、绿色和蓝色(RGB)

示例代码如下:

import re
from PySide6.QtCore import Qt
from PySide6.QtGui import QPalette, QColor
from PySide6.QtWidgets import QLabel

class ColorLable(QLabel):
    def __init__(self, text, color=None, fontcolor="white", align=Qt.AlignCenter):
        """接收color参数为:按颜色名称(如 "red")、十六进制颜色代码(如 "#000000")以及RGB值(如 rgb(83, 168, 255))"""
        super(ColorLable, self).__init__()
        self.setAlignment(align)
        self.setStyleSheet(f"color:{fontcolor}")
        self.setAutoFillBackground(True)
        if color is None:
            color = text
        rgb_match = re.match(r'rgb\((\d+),\s*(\d+),\s*(\d+)\)', color)
        if rgb_match:
            r, g, b = map(int, rgb_match.groups())
            qcolor = QColor(r, g, b)
        else:
            qcolor = QColor(color)
        r, g, b, _ = qcolor.getRgb()
        hex_str_upper = qcolor.name().upper()
        if color is text:
            self.setText(f"{color}<br>rgb({r}, {g}, {b})<br>{hex_str_upper}")
        elif text == "":
            self.setText(f"rgb({r}, {g}, {b})<br>{hex_str_upper}")
        else:
            self.setText(f"{text}<br>rgb({r}, {g}, {b})<br>{hex_str_upper}")
        palette = self.palette()
        palette.setColor(QPalette.Window, qcolor)
        self.setPalette(palette)

主色

在视觉设计中指的是在一幅画面、设计作品或空间中占据主导地位的颜色。这种颜色通常是最引人注目的,能够影响整体的视觉效果和情感氛围。选择合适的主色调对于确保设计的协调性和传达正确的信息至关重要。

示例代码如下:

import sys
from PySide6.QtWidgets import *
from color.colorlable import ColorLable
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("QColor之主色-蓝色系")
        self.setMinimumSize(700, 500)
        vboxlayout = QVBoxLayout()
        hboxlayout = QHBoxLayout();
        vboxlayout.addWidget(ColorLable("Brand Color", "#409EFF","black"))
        hboxlayout.addWidget(ColorLable("","rgb(83, 168, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(102, 177, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(121, 187, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(140, 197, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(160, 207, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(179, 216, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(198, 226, 255)","black"))
        hboxlayout.addWidget(ColorLable("", "rgb(217, 236, 255)","black"))
        vboxlayout.addLayout(hboxlayout)
        widget = QWidget()
        widget.setLayout(vboxlayout)
        self.setCentralWidget(widget)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

暖色

温暖色系主要包括红色、橙色、黄色及其衍生色调,这些颜色通常会让人联想到阳光、火焰和暖光等,能够给人带来温暖、舒适和活力的感觉。在视觉设计、艺术和室内装饰中,温暖色系经常被用来创造亲切、欢快的氛围

示例代码如下:

import sys
from PySide6.QtWidgets import *
from color.colorlable import ColorLable
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("QColor之暖色系")
        self.setMinimumSize(700, 500)
        layout = QHBoxLayout()
        layout.addWidget(ColorLable("red"))
        layout.addWidget(ColorLable("orange"))
        layout.addWidget(ColorLable("yellow"))
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

辅助色

是色轮上互为对立的颜色,它们在视觉上形成鲜明的对比,能够相互强化对方的鲜艳度和视觉冲击力。当这些颜色组合在一起时,可以创造出极具吸引力和动态的视觉效果,除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)

示例代码如下:

import sys
from PySide6.QtWidgets import *
from color.colorlable import ColorLable
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("QColor之辅助色")
        self.setMinimumSize(700, 500)
        mainlayout = QHBoxLayout()
        vboxsuccess = QVBoxLayout()
        hboxsuccess = QHBoxLayout()
        vboxsuccess.addWidget(ColorLable("Success", "#67C23A","black"))
        hboxsuccess.addWidget(ColorLable("","rgb(225, 243, 216)","black"))
        hboxsuccess.addWidget(ColorLable("", "rgb(240, 249, 235)","black"))
        vboxsuccess.addLayout(hboxsuccess)
        mainlayout.addLayout(vboxsuccess)
        vboxwarn = QVBoxLayout()
        hboxwarn = QHBoxLayout()
        vboxwarn.addWidget(ColorLable("Warning", "#E6A23C", "black"))
        hboxwarn.addWidget(ColorLable("", "rgb(250, 236, 216)", "black"))
        hboxwarn.addWidget(ColorLable("", "rgb(253, 246, 236)", "black"))
        vboxwarn.addLayout(hboxwarn)
        mainlayout.addLayout(vboxwarn)
        vboxdanger = QVBoxLayout()
        hboxdanger = QHBoxLayout()
        vboxdanger.addWidget(ColorLable("Danger", "#F56C6C", "black"))
        hboxdanger.addWidget(ColorLable("", "rgb(253, 226, 226)", "black"))
        hboxdanger.addWidget(ColorLable("", "rgb(254, 240, 240)", "black"))
        vboxdanger.addLayout(hboxdanger)
        mainlayout.addLayout(vboxdanger)
        vboxinfo = QVBoxLayout()
        hboxinfo = QHBoxLayout()
        vboxinfo.addWidget(ColorLable("Info", "#909399", "black"))
        hboxinfo.addWidget(ColorLable("", "rgb(233, 233, 235)", "black"))
        hboxinfo.addWidget(ColorLable("", "rgb(244, 244, 245)", "black"))
        vboxinfo.addLayout(hboxinfo)
        mainlayout.addLayout(vboxinfo)
        widget = QWidget()
        widget.setLayout(mainlayout)
        self.setCentralWidget(widget)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

中性色

中性色指的是不包含或几乎不包含色相的颜色,它们在色彩搭配中起到平衡和稳定的作用。中性色包括黑色、白色、灰色,以及不同深浅的棕色和米色。这些颜色因其灵活性和适应性,在设计和艺术领域中被广泛应用。常用于文本、背景和边框颜色,通过运用不同的中性色,来表现层次结构。

示例代码如下:

import sys
from PySide6.QtWidgets import *
from color.colorlable import ColorLable
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("QColor之辅助色")
        self.setMinimumSize(700, 500)
        mainlayout = QHBoxLayout()
        layout1 = QVBoxLayout()
        layout1.addWidget(ColorLable("主要文字", "#303133"))
        layout1.addWidget(ColorLable("常规文字", "#606266"))
        layout1.addWidget(ColorLable("次要文字", "#909399"))
        layout1.addWidget(ColorLable("占位文字", "#C0C4CC"))
        mainlayout.addLayout(layout1)
        layout2 = QVBoxLayout()
        layout2.addWidget(ColorLable("一级边框", "#DCDFE6", "black"))
        layout2.addWidget(ColorLable("二级边框", "#E4E7ED", "black"))
        layout2.addWidget(ColorLable("三级边框", "#EBEEF5", "black"))
        layout2.addWidget(ColorLable("四级边框", "#F2F6FC", "black"))
        mainlayout.addLayout(layout2)
        layout3 = QVBoxLayout()
        layout3.addWidget(ColorLable("基础黑色", "#000000"))
        layout3.addWidget(ColorLable("基础白色", "#FFFFFF", "black"))
        layout3.addWidget(ColorLable("透明", "Transparent", "black"))
        mainlayout.addLayout(layout3)
        widget = QWidget()
        widget.setLayout(mainlayout)
        self.setCentralWidget(widget)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

颜色选择器

Pyside6可以通过QColorDialog.getColor(),直接打开颜色选择器

import sys
from PySide6.QtWidgets import QApplication, QColorDialog
if __name__ == '__main__':
    app = QApplication(sys.argv)
    color = QColorDialog.getColor()
    sys.exit(app.exec())

SVG颜色码表

3、更换系统主题

在PySide6与html页面实现主题切换类似,通过更换全局样式表实现,具体步骤如下:

1.定义样式表:为每个主题创建一个样式表文件,或者在一个大的样式表文件中为不同的主题定义不同的部分。

2. 加载样式表:在应用程序启动时,根据用户的主题选择加载相应的样式表。这可以通过读取一个配置文件、数据库或者其他持久化存储的方式来确定用户上次选择的主题。

3. 应用样式表:使用QApplication的setStyleSheet方法应用加载的样式表。这将影响应用程序中所有控件的外观。

4. 切换主题:提供一个界面元素(如菜单项、按钮等)供用户选择主题。当用户选择一个新主题时,重新加载对应的样式表并应用它。

5. 保存用户选择:将用户的主题选择保存到配置文件、数据库或其他持久化存储中,以便下次启动应用程序时能够恢复用户的选择。

示例代码如下:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QColor之主题切换")
        self.setGeometry(100, 100, 400, 300)
        # 创建中心窗口和布局
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        layout = QVBoxLayout(centralWidget)
        # 创建切换主题的按钮
        self.toggleThemeBtn = QPushButton("切换")
        self.toggleThemeBtn.clicked.connect(self.toggleTheme)
        layout.addWidget(self.toggleThemeBtn)
        # 默认主题
        self.currentTheme = "light"

    def toggleTheme(self):
        if self.currentTheme == "light":
            self.applyDarkTheme()
            self.currentTheme = "dark"
        else:
            self.applyLightTheme()
            self.currentTheme = "light"
    def applyLightTheme(self):
        self.setStyleSheet("""
            QPushButton {background-color: white;color: black;}
            QMainWindow {background-color: lightgray;}
        """)
    def applyDarkTheme(self):
        self.setStyleSheet("""
            QPushButton {background-color: black;color: white;}
            QMainWindow {background-color: darkgray;}
        """)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

相关推荐

电脑自带的清理垃圾的工具(电脑自带的清理垃圾的工具叫什么)

CCleaner是一款免费的系统优化和隐私保护工具,它的体积小、扫描速度非常快,支持自定义清理规则,增强了应用程序清理范围和效果。CCleaner是Piriform(梨子公司)最著名广受好评的系统清理...

笔记本电脑用什么下载软件(笔记本电脑用什么下载软件比较好)
  • 笔记本电脑用什么下载软件(笔记本电脑用什么下载软件比较好)
  • 笔记本电脑用什么下载软件(笔记本电脑用什么下载软件比较好)
  • 笔记本电脑用什么下载软件(笔记本电脑用什么下载软件比较好)
  • 笔记本电脑用什么下载软件(笔记本电脑用什么下载软件比较好)
如何设置本地连接

在“控制面板”中,选择“网络和Internet”>“网络和共享中心”。在左侧窗格中,选择“更改适配器设置”。在“网络连接”窗口中,右键单击“本地连接”,然后选择“属性”。在“本地连接...

office2007官方免费版安装包
  • office2007官方免费版安装包
  • office2007官方免费版安装包
  • office2007官方免费版安装包
  • office2007官方免费版安装包
戴尔官网官方网站(戴尔产品官网)

查询步骤如下:1.在戴尔电脑的后盖上找到服务编号,并记录下来。2.之后搜索戴尔官网,在打开的官网界面中点击上方的支持选项,并点击产品支持。3.在打开的产品支持界面中,输入电脑后盖上的服务编号。4.如果...

黑鲨u盘重装系统教程(黑鲨u盘重装系统步骤8)

U盘重装WIn10系统:1、用【u深度u盘启动盘制作工具】制作u盘启动盘,插入电脑usb接口,设置好开机启动项进入u深度主菜单界面,选择“【02】u深度win8pe标准版(新机器)”并回车,2、在u深...

电子邮件免费注册入口(电子邮件在线注册)

1.在网页上搜索maiI163邮箱登录,如果有邮箱账号密码的话就直接输入并点击“登录”,没有的话就点击“立即注册”。2.点击“立即注册”后进入页面,输入信息点击“注册”。3.注册成功后就直接搜索登录。...

win7如何快速启动(windows7如何快速启动)
win7如何快速启动(windows7如何快速启动)

打开操作系统运行:输入"cmd"并点击回车:系统命令提示符自动打开:使用方法直接运行start打开一个新的命令提示符窗口:运行start+文件的绝对存储路径打开对应的文件:运行start+文件夹路径打开对应...

2025-12-29 13:03 off999

怎么升级到win11(怎么升级到win11专业版)

Windows11可以在「开始菜单-设置-Windows更新」中进行手动更新。如果您想主动更新,需先确保您的电脑符合Windows11的最低系统要求。接着,打开「Windows更...

微信好友误删了怎么加回来(微信好友误删了怎么加回来免费)

看到他的评论的话,你可以去你发过的内容里去看看。<br/><br/>好友验证的消息、语音)或者朋友圈内容:<br/>如果你这个朋友喜欢和你在朋友圈聊天的话,你他的手机号也有的话方法添加里输入就可...

access安装包(access安装包怎么安装)
access安装包(access安装包怎么安装)

要下载并安装MicrosoftAccess,可以按照以下步骤进行操作:1.打开您的电脑的浏览器(如谷歌浏览器、火狐浏览器等)。2.在浏览器的搜索栏中输入"下载MicrosoftAccess"。3.从搜索结果中选择适...

2025-12-29 11:51 off999

云骑士装机大师官方网站(云骑士装机大师软件下载)

就是感觉正规吧,还有就是小白那种的比较多,专业店一忽悠就掏钱做系统了。懂装机的哪有花钱去装系统的不靠谱,因为会造成个人信息的泄露。云骑士装机大师是网络装机系统,在网络上能够实现一键装机,非常的简洁方便...

万能钥匙下载免费(安心上网万能钥匙下载免费)

行1.使用手机功能表中自带的浏览器上网,直接搜索需要的软件进行下载安装(下载安卓版本格式为apk)。2.使用电脑下载APK格式的安装包,连接数据线传输至手机,操作手机在应用程序-我的文件中找到安装包,...

500兆宽带用什么路由器(家用路由器什么牌子好 信号强)

1、飞鱼星千兆无线路由器家用2600M双频企业级高速穿墙500M光纤游戏加速VW1900/千兆双频/1900M/大型企业路由器无线500m推荐理由:可以提供企业级别的性能,空旷环境覆盖更广大,...

xp系统怎么卸载软件(xp怎么卸载程序)

1、选中此电脑,点击鼠标右键。2、选择属性点击一下。3、在打开的界面选择控制面板。4、点击程序选项下方的卸载。5、选择要卸载的程序软件,点击鼠标右键。6、点击弹出的选项卸载/更改。7、也可以使用电脑管...

取消回复欢迎 发表评论: