从 tkinter 颜色名称获取 rgb 值

问题描述

我需要每个 tkinter“颜色名称”和“颜色值(例如 rgb)”之间的映射。 可以是一一对应的列表,也可以是转换这些列表的函数

有像 matplotlib 的 hex2color 或 to_rgba 这样的函数,但它们不支持所有的 tkinter 颜色名称,因为其中一些对模块来说太特殊了(比如“ghost white”);我想知道当然必须有一个特定于 tkinter 本身,因为它的开发人员需要它来实现模块。

解决方法

使用 winfo_rgb 方法。如果你传递黄色,它会返回 rgb 值(16 位),然后你可以除以 256 得到大约 8 位的值。

root.winfo_rgb('yellow')

返回 (65535,65535,0)

root.winfo_rgb('ghostwhite')

返回 (63736、63736、65535)

将 8 位 RGB 值作为元组获取的单行是

rgb = tuple((c//256 for c in root.winfo_rgb('ghostwhite')))