如何获得窗口背景色的十六进制或RGB颜色代码?

时间:2019-11-07 23:41:45

标签: python tkinter

我想找到HEX格式的窗口背景色。寻找适用于所有平台的解决方案... Windows / Linux / Mac ...

以下代码print (self.cget('bg'))仅显示SystemButtonFace,但我想获取实际的十六进制格式。原因是我需要使用这种颜色作为基础来创建新的稍深的颜色阴影。

2 个答案:

答案 0 :(得分:1)

所有小部件上的winfo_rgb方法将接受颜色名称,并将r,g和b分量作为整数返回,范围为0-65535(16位)。然后,您可以使用标准python字符串格式将其转换为十六进制。

答案 1 :(得分:0)

感谢布莱恩·奥克利(Bryan Oakley)的回答,他写了这种方法:

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')在Windows上返回类似于SystemButtonFace的内容,但在Linux上实际上返回十六进制颜色代码。

因此,如果self.cget('bg')调用未返回十六进制颜色代码(以#开头的字符串长度7),则仅需要调用上述函数。