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颜色字典中的十六进制代码不兼容!
那里有解决方法吗?
答案 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);
}
它工作正常。