【问题标题】:Is it possible to use background-aware color choices?是否可以使用背景感知颜色选择?
【发布时间】:2021-09-27 14:59:29
【问题描述】:

rich 项目允许指定控制台标记,包括文本颜色。然而,似乎任何颜色选择都需要硬编码,例如使用红色表示重要消息:

from rich import print

print('[red bold]This is a very important notification[/]')

这在具有浅色背景色(例如日光照射)的终端上看起来不错:

但是,当用户的背景颜色较深时,会使其难以阅读(例如 Solarized dark):

但是,作为使用rich 的命令行应用程序的开发人员,我不能为用户的终端假定任何背景颜色,因此硬编码特定颜色似乎不是一个好主意(我不想修改背景颜色,因为用户可能选择它是有充分理由的)。所以我想知道rich 是否提供背景感知颜色选择(例如通过主题,所以我可以指定类似category='important' 的东西)?

【问题讨论】:

  • 只为该文本跨度使用指定的背景颜色是否有效?如何检测终端的背景颜色并在此基础上实现自己的逻辑?
  • @KarlKnechtel 两种解决方案都可以,但如果终端的背景颜色与 w.r.t 的对比度较低,我更愿意选择不同的文本颜色。红色的。你知道是否可以通过rich(或其他可靠的方法)检测终端的背景颜色吗?

标签: python rich


【解决方案1】:

终端中的前 16 种颜色(包括红色)是由终端软件定义的,通常选择它们可以很好地协同工作。例如,在 MacOS 上的 iTerm 中,这里是红底黑字。

黑底红字几乎可以在所有终端上完美读取。一个值得注意的例外是经典的 Windows 终端(我猜你正在使用它),它有一些经过深思熟虑的调色板。

关于硬编码颜色,您可以通过themes 创建主题别名,这样您就可以使用"[important] message" 而不是"[bold red] message"

【讨论】:

  • 我正在使用带有 GNOME 3.36 的 Ubuntu 20.04。我包含的屏幕截图显示了具有Solarized light or dark 颜色配置文件的标准终端应用程序(我认为这是一个流行的选择)。终端应用程序提供了其他主题,例如难以阅读的“Tango dark”(灰色背景)。我同意黑色上的红色很好。是否有通过rich 检测终端背景颜色的选项,这样当背景既不是浅色也不是黑色时,我可以选择另一种文本颜色?
  • 恐怕没有可靠的方法以编程方式检测终端配色方案。您必须依靠用户选择具有良好对比度的主题。请记住,显示器的伽玛、对比度、亮度设置将对易读性产生重大影响。链接中的屏幕截图对我来说都很清楚。
猜你喜欢
  • 2013-05-31
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多