样式¶
在Rich API中的不同位置,您可以设置“style”,它定义文本的颜色和各种属性,如粗体、斜体等。 style definition 或作为 Style
班级。
定义样式¶
样式定义是包含一个或多个用于设置颜色和属性的单词的字符串。
要指定前景色,请使用256种颜色之一 标准颜色 。例如,要以洋红色打印“Hello”::
console.print("Hello", style="magenta")
还可以将颜色的数字(0到255之间的整数)与以下语法一起使用 "color(<number>)"
。以下内容将给出相同的输出:
console.print("Hello", style="color(5)")
或者,您可以使用类似于css的语法来指定颜色,其中“#”后跟三对十六进制字符,或者以RGB形式指定三个十进制整数。下面两行都用相同的颜色(紫色)打印“Hello”:
console.print("Hello", style="#af00ff")
console.print("Hello", style="rgb(175,0,255)")
十六进制和RGB格式允许您从完整的 truecolor 一套1670万种颜色。
备注
有些终端只支持256色。如果您的颜色不可用,Rich会尝试选择最接近的颜色。
一种颜色本身就会改变 foreground 颜色。要指定一个 background 颜色,在颜色前面加上“开”字。例如,下面的代码在白色背景上以红色打印文本:
console.print("DANGER!", style="red on white")
您还可以使用单词设置颜色 "default"
这会将颜色重置为您的终端软件管理的默认颜色。这也适用于背景,因此 "default on default"
就是你的终端开始时的样子。
您可以通过添加以下一个或多个单词来设置样式属性:
"bold"
或"b"
用于粗体文本。"blink"
对于闪烁的文本(请谨慎使用此选项)。"blink2"
用于快速闪烁的文本(大多数终端不支持)。"conceal"
为 concealed 文本(大多数终端不支持)。"italic"
或"i"
用于斜体文本(Windows上不支持)。"reverse"
或"r"
用于前景色和背景色颠倒的文本。"strike"
或"s"
用于带划线的文本。"underline"
或"u"
用于带下划线的文本。
Rich还支持以下样式,这些样式不受很好的支持,可能不会显示在您的终端中:
"underline2"
或"uu"
用于带双下划线的文本。"frame"
用于带框架的文本。"encircle"
用于圆圈文本。"overline"
或"o"
用于带上划线的文本。
样式属性和颜色可以彼此组合使用。例如::
console.print("Danger, Will Robinson!", style="blink bold red underline on white")
可以通过在属性前面加上单词“Not”来否定样式。如果样式重叠,则可以使用此选项关闭样式。例如::
console.print("foo [not bold]bar[/not bold] baz", style="bold")
这将以粗体打印“foo”和“baz”,但“bar”将以普通文本显示。
样式也可能有一个 "link"
属性,该属性会将任何样式文本转换为 hyperlink (如果您的终端软件支持)。
要添加指向样式的链接,定义应包含单词 "link"
后跟一个URL。下面的示例将创建一个可点击的链接:
console.print("Google", style="link https://google.com")
备注
如果您熟悉HTML,您可能会发现以这种方式应用链接有点奇怪,但终端认为链接是另一个属性,就像粗体、斜体等。
Style类¶
最终,样式定义将被解析,并且 Style
类已创建。如果愿意,可以使用Style类代替样式定义。以下是一个示例:
from rich.style import Style
danger_style = Style(color="red", blink=True, bold=True)
console.print("Danger, Will Robinson!", style=danger_style)
构造这样的样式类稍微快一些,因为样式定义需要一点时间来解析--但只在第一次调用时,因为Rich将缓存已解析的样式定义。
可以通过将样式添加到一起来组合它们,这在您要修改现有样式的属性时非常有用。以下是一个示例:
from rich.console import Console
from rich.style import Style
console = Console()
base_style = Style.parse("cyan")
console.print("Hello, World", style = base_style + Style(underline=True))
属性显式解析样式定义 parse()
方法,该方法接受样式定义并返回样式实例。例如,以下两行是等价的:
style = Style(color="magenta", bgcolor="yellow", italic=True)
style = Style.parse("italic magenta on yellow")
风格主题¶
如果您重用样式,如果您想要修改属性或颜色,这可能是一个令人头疼的维护问题--您必须更改使用该样式的每一行。RICH提供了一个 Theme
类的新实例,该类可用于定义可按名称引用的自定义样式。这样,您只需要在一个地方更新您的样式。
样式主题可以使您的代码更具语义,例如名为 "warning"
更好地表达了 "italic magenta underline"
。
若要使用样式主题,请构造 Theme
实例并将其传递给 Console
构造函数。以下是一个示例:
from rich.console import Console
from rich.theme import Theme
custom_theme = Theme({
"info": "dim cyan",
"warning": "magenta",
"danger": "bold red"
})
console = Console(theme=custom_theme)
console.print("This is information", style="info")
console.print("[warning]The pod bay doors are locked[/warning]")
console.print("Something terrible happened!", style="danger")
备注
样式名称必须小写,以字母开头,并且仅包含字母或字符 "."
, "-"
, "_"
。
自定义默认设置¶
主题类将继承Rich内置的默认样式。如果您的自定义主题包含现有样式的名称,它将替换它。这使您可以像创建自己的样式一样轻松地自定义默认设置。例如,以下是如何更改Rich突出显示数字的方式:
from rich.console import Console
from rich.theme import Theme
console = Console(theme=Theme({"repr.number": "bold green blink"}))
console.print("The total is 128")
您可以通过设置禁用继承默认主题 inherit=False
在 rich.theme.Theme
构造函数。
要查看默认主题,请运行以下命令:
python -m rich.theme
python -m rich.default_styles
正在加载主题¶
如果您愿意,可以在外部配置文件中编写样式,而不是在Python中编写。以下是格式的一个示例::
[styles]
info = dim cyan
warning = magenta
danger = bold red
您可以使用 read()
方法。