Благодаря ответу Брайана Окли написал этот метод:
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, начинающаяся с #).