Как получить именованный цвет в 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())]
это работает отлично.