实战PyQt5: 114-颜色类QColor

QColor简介

QColor类提供基于RGB、HSV或CMYK值的颜色。颜色通常用RGB(红色、绿色和蓝色)分量指定,但也可以用HSV(色相、饱和度和值)和CMYK(青色、品红、黄色和黑色)分量指定。此外,可以使用颜色名称指定颜色(颜色名称可以是SVG 1.0的任何颜色名称)。

实战PyQt5: 114-颜色类QColor

图片来源:doc.qt.io

QColor对象是基于RGB颜色来创建的,如果要使QColor基于HSV(或CMYK),请使用函数toHsv()和toCmyk()来,这些函数会返回一个所需格式QColor对象。另外,使用静态函数fromRgb(), fromHsv()和fromCmyk()函数可以创建相应格式的QColor对象。或者使用convertTo()函数,该函数返回所需格式的QColor对象。也可以使用setRgb(), setHsv(), setCmyk()函数来改变颜色的格式。

可以通过将RGB字符串(例如“#112233”)或ARGB字符串(例如“#ff112233”)或颜色名称(例如“ blue”)传递给setNamedColor()函数来设置颜色。颜色名称取自SVG 1.0颜色名称。name()函数返回的格式为“#RRGGBB”颜色的名字。还可以使用setRgb(),setHsv()和setCmyk()设置颜色。要获得较浅或较深的颜色,请分别使用lighter()和darker()函数。

isValid()函数表示QColor是否合法。例如,RGB颜色的RGB值超出范围是非法的。由于性能原因,QColor基本上不考虑非法颜色,因此,使用无效颜色的结果是无法定义的。

颜色分量可以单独检索,例如。用red(),hue()和cyan()可以获得红色,色调和青色颜色分量。还可以使用getRgb()、getHsv()和getCmyk()函数一次性检索颜色分量的值。使用RGB颜色模型时,还可以使用rgb()访问颜色分量。

QColor支持浮点精度,提供所有颜色组件函数的浮点版本,例如getRgbF()、hueF()和fromCmykF()。注意,由于组件是使用16位整数存储的,因此使用setRgbF()和getRgbF()函数返回的值之间可能存在微小的偏差。

基于整数的函数取值范围为0-255 (hue()除外,其值必须在0-359范围内),基于浮点函数接受范围为0.0 - 1.0的值。

QColor还支持Alpha混合,颜色的Alpha通道指定透明效果,0表示完全透明的颜色,而255表示完全不透明的颜色。例如:

#指定一个半透明的红色
painter.setBrush(QColor(255, 0, 0, 127))
painter.drawRect(0, 0, self.width()/2, self.height())
#指定一个半透明的蓝色
painter.setBrush(QColor(0,0,255,127))
painter.drawRect(0, 0, self.width(), self.height()/2)

上述代码产生以下显示效果:

实战PyQt5: 114-颜色类QColor

图片来源:doc.qt.io

如果颜色的值是整数,则可以使用alpha()和setAlpha()函数来检索和设置颜色的alpha通道;如果值是qreal(双精度),则可以使用alphaF()和setAlphaF()来检索和设置颜色。默认情况下,alpha通道设置为255(不透明)。要一次性检索和设置所有RGB颜色分量(包括alpha通道),请使用rgba()和setRgba()函数。

QColor常用函数

  • alpha(self), alphaF(self):返回颜色的Alpha分量
  • black(self), blackF(self): 返回颜色的黑色分量
  • cyan(self), cyanF(self): 返回此颜色的青色分量
  • yellow(self), yellowF(self):返回此颜色的黄色分量
  • magenta(self), magentaF(self):返回此颜色的洋红色分量
  • red(self), redF(self): 返回颜色的红色分量
  • green(self), greenF(self):返回颜色的绿色分量
  • blue(self), bueF(self): 返回颜色的蓝色分量
  • colorNames(self): 返回一个包含Qt中预定义颜色的名字列表
  • convertTo(self, colorSpec): 以colorSpec指定的格式创建颜色的副本
  • darker(self, factor): 返回较暗(或更浅)的颜色
  • lighter(self, factor): 返回较浅(或更暗)的颜色
  • fromCmyk(c,m,y,k, a), fromCmykF(c, m, y, k, a): 静态函数,该函数返回从给定的CMYK颜色值构建的QColor对象
  • fromHsl(h, s, l, a), fromHslF(h, s, l, a): 静态函数,该函数返回从给定的HSV颜色值构建的QColor对象。sla的值都必须在0-255的范围内;h的值必须在0-359的范围内。
  • fromRgb(r, g, b, a), fromRgbF(r, g, b,a): 静态函数,该函数返回从给定的RGB颜色值构建的QColor对象。
  • getHsl(self), getHslF(self): 获得HSL颜色值
  • getCmyk(self). getCmykF(self): 获得CMYK 颜色值
  • getRgb(self), getRgbF(self): 获得RGB颜色值
  • hslHue(self), hslHueF(self): 返回HSL色调颜色分量
  • hslSaturation(self), hslSaturationF(self): 返回HSL饱和度颜色分量
  • hsvHue(self), hslHueF(self): 返回HSV色调颜色分量
  • hsvSaturation(self), hsvSaturationF(self): 返回HSV饱和度颜色分量
  • hue(self), hueF(self): 返回HSV色调颜色分量
  • saturation(self), saturationF(self)返回颜色的饱和度
  • lightness(self), lightnessF(self): 返回亮度颜色分量
  • value(self),valueF(self): 返回HSV 中的value分量
  • isValid(self): 有效颜色返回True,否则返回False
  • name(self): 以“ #RRGGBB”格式返回颜色的名称;即一个“#”字符,后跟三个两位的十六进制数字。
  • name(self, format): 以指定格式 format返回颜色的名称
  • setAlpha(self, alpha), setAlphaF(): 将颜色的Alpha值设置为alpha。
  • setRed(self, r), setRedF(self, r): 设置颜色的红色分量
  • setGreen(self, g), setGreenF(self, r):设置颜色的绿色分量
  • setBlue(self, b), setBlueF(self, b): 设置颜色的蓝色分量
  • setCmyk(self, c, m, y, k, a), setCmykF(self, c, m, y, k, a)设置的CMYK颜色值
  • setHsl(self, h, s, l, a), setHslF(self, h, s, l, a)设置的HSL颜色值
  • setHsv(self, h, s, v, a), setHsvF(self, h, s, v, a)设置的HSV颜色值
  • toCmyk(self): 基于此颜色创建并返回CMYK的QColor对象
  • toHsl(self): 基于此颜色创建并返回HSL的QColor对象
  • toHsv(self): 基于此颜色创建并返回HSV的QColor对象
  • toRgb(self): 基于此颜色创建并返回RGB的QColor对象

测试

测试程序使用QLabel显示了Qt内部预定义了名字的颜色,完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel
 
class DemoColor(QWidget):
    def __init__(self, parent=None):
        super(DemoColor, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QColor预定义颜色表')      
              
        self.initUi()
        
    def initUi(self):
        layout = QGridLayout()
        
        line_count = 8 #每一行的显示个数
        index = 0
        
        print(len(QColor.colorNames()))
        for name in QColor.colorNames():
            color_label = QLabel()
            color_label.setMinimumHeight(24)
            color_label.setText(name)
            
            #设置背景色,边框和文字颜色
            styleSheet = 'QLabel{background-color: ' + name + '; border:1px solid 0; font: 16px;color: black;}'
            if (QColor(name).getHsv()[2] < 200) and (name != 'transparent'):
                styleSheet = 'QLabel{background-color: ' + name + '; border:1px solid 0; font: 16px;color: white;}'
            color_label.setStyleSheet(styleSheet)
            
            layout.addWidget(color_label, index//line_count, index % line_count)
            index += 1
        
        self.setLayout(layout)
    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoColor()
    window.show()
    sys.exit(app.exec())  

运行结果如下图:

实战PyQt5: 114-颜色类QColor

Qt内部预定义的颜色值

本文知识点

  • QColor类提供基于RGB、HSV或CMYK值的颜色。
  • RGB、HSV或CMYK值之间的转换。
  • Qt内部预定义的颜色。

前一篇:实战PyQt5: 113-QSS+定制窗口的标题栏

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值