QColor简介
QColor类提供基于RGB、HSV或CMYK值的颜色。颜色通常用RGB(红色、绿色和蓝色)分量指定,但也可以用HSV(色相、饱和度和值)和CMYK(青色、品红、黄色和黑色)分量指定。此外,可以使用颜色名称指定颜色(颜色名称可以是SVG 1.0的任何颜色名称)。
图片来源: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表示完全不透明的颜色。例如:
#指定一个半透明的红色
(QColor(255, 0, 0, 127))
(0, 0, ()/2, ())
#指定一个半透明的蓝色
(QColor(0,0,255,127))
(0, 0, (), ()/2)
上述代码产生以下显示效果:
图片来源: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对象。s,l和a的值都必须在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 PyQ import QColor
from PyQ import QApplication, QWidget, QGridLayout, QLabel
class DemoColor(QWidget):
def __init__(self, parent=None):
super(DemoColor, self).__init__(parent)
# 设置窗口标题
('实战PyQt5: QColor预定义颜色表')
()
def initUi(self):
layout = QGridLayout()
line_count = 8 #每一行的显示个数
index = 0
print(len()))
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
(layout)
if __name__ == '__main__':
app = QApplication)
window = DemoColor()
window.show()
())
运行结果如下图:
Qt内部预定义的颜色值
本文知识点
- QColor类提供基于RGB、HSV或CMYK值的颜色。
- RGB、HSV或CMYK值之间的转换。
- Qt内部预定义的颜色。
前一篇:实战PyQt5: 113-QSS+定制窗口的标题栏
喜欢的人,请多多关注,评论,收藏,点赞,和转发。