Как получить именованный цвет в PyQt?

PyQt имеет целый класс (QtGui.QColor) для обработки цветов в нескольких форматах. Этот класс включает метод setNamedColor(), который получает именованный цвет в соответствии с именами ключевых слов цвета SVG, предоставленными консорциумом World Wide Web, и возвращает цвет в виде значения RGB.

Итак, учитывая (псевдо) код:

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

каждый получает что-то вроде "#0000ff"

Но я хочу с точностью до наоборот: функцию getNamedColor(), которая при правильном значении RGB будет возвращать имя цвета в соответствии с вышеупомянутыми именами ключевых слов цвета SVG.

Удовлетворительным решением было бы использование таблицы цветов Matplotlib (см. Здесь) в такой удобной функции:

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

но, чтобы усложнить задачу, кажется, что шестнадцатеричные коды, сгенерированные QColor(), не совместимы с кодами в цветовом словаре Matplotlib!

Есть ли какое-то решение для этого там?

1 ответ

Оказалось, что ответ на мою проблему был довольно прост (хотя и не сразу очевиден):

Шестнадцатеричные коды QColor() выглядят следующим образом: "#0000ff", тогда как в словаре цветов Matplotlib все коды пишутся в верхнем регистре: "#0000FF".

Итак, изменив маленькую функцию выше:

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

это работает отлично.

Другие вопросы по тегам