如何在PyQt中获取命名颜色?

时间:2017-09-30 21:00:13

标签: python matplotlib colors

PyQt有一个全班(QtGui.QColor),用于处理多种格式的颜色。此类包含setNamedColor()方法,该方法接收由万维网联盟提供的SVG color keyword names定义的命名颜色,并返回颜色作为RGB值。

所以,给定(伪)代码:

my_color = QtGui.QColor()
my_color.setNamedColor("red")

有人会得到像#0000ff"

这样的东西

但我想要的恰恰相反:a" getNamedColor()"根据上面提到的SVG颜色关键字名称,给定valide RGB值将返回颜色的名称的函数。

一个令人满意的解决方案是在一个方便的函数中使用Matplotlib颜色表(参见here):

import matplotlib.colors as colors
def get_named_color(hex):
    return colors.cnames.keys()[colors.cnames.values().index(hex)]

但是为了使事情变得困难,似乎QColor()生成的十六进制代码与Matplotlib颜色字典中的十六进制代码不兼容!

那里有解决方法吗?

1 个答案:

答案 0 :(得分:2)

事实证明,我的问题的答案非常简单(尽管不是很明显):

QColor()十六进制代码如下:'#0000ff'而在Matplotlib颜色词典中,所有代码都是大写的:'#0000FF'。

所以,将上面的小函数修改为:

// Returns the typed storage for __v.
template<size_t _Np, typename _Variant>
constexpr decltype(auto) __get(_Variant&& __v)
{
    return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
}

它工作正常。