Как я могу получить код цвета HEX или RGB цвета фона окна? - PullRequest
0 голосов
/ 08 ноября 2019

Я бы хотел найти цвет фона окна в формате HEX. Ищите решение, которое работает на всех платформах ... Windows / Linux / Mac ...

Следующий код print (self.cget('bg')) просто печатает SystemButtonFace, но я бы хотел получить фактический формат HEX. Причина в том, что мне нужно использовать этот цвет в качестве основы для создания нового немного более темного цветового оттенка.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Метод winfo_rgb во всех виджетах примет имя цвета и вернет компоненты r, g и b в виде целых чисел в диапазоне 0-65535 (16 бит). Затем вы можете преобразовать их в шестнадцатеричный формат, используя стандартное форматирование строки Python.

0 голосов
/ 08 ноября 2019

Благодаря ответу Брайана Окли написал этот метод:

def get_widget_hex_color_by_known_name(w, knwon_system_color):
    """
    w is a tkinter widget i.e. tk.Button() or self
    knwon_system_color can be any known color name like white, green, SystemButtonFace
    """
    rgb = w.winfo_rgb(knwon_system_color)
    r,g,b=[x>>8 for x in rgb]
    return '#{:02x}{:02x}{:02x}'.format(r,g,b)

Обратите внимание, что self.cget('bg') возвращает что-то вроде SystemButtonFace в Windows, но в Linux он фактически возвращает шестнадцатеричный код цвета.

Поэтому мне нужно вызывать функцию выше, только если вызов self.cget('bg') не возвращает шестнадцатеричный код цвета (длина строки 7, начинающаяся с #).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...