控制台标记

Rich 支持一种简单的标记,你可以用它在几乎所有 Rich 接受字符串的地方插入颜色和样式(例如 print()log())。

运行以下命令以查看一些示例

python -m rich.markup

语法

控制台标记使用受 bbcode 启发的语法。如果你在方括号中写下样式(见 样式),例如 [bold red],那么该样式将应用直到它被一个对应的 [/bold red] 关闭

以下是一个简单的示例

from rich import print
print("[bold red]alert![/bold red] Something happened")

如果你没有关闭样式,它将应用到字符串的末尾。如果你想对单行进行样式化,这有时很方便。例如

print("[bold italic yellow on red blink]This text is impossible to read")

有一种简写方法可以关闭样式。如果你省略了结束标记中的样式名称,Rich 将关闭最后一个样式。例如

print("[bold red]Bold and red[/] not bold or red")

这些标记可以相互组合使用,不需要严格嵌套。以下示例演示了标记的重叠

print("[bold]Bold[italic] bold and italic [/bold]italic[/italic]")

错误

如果标记包含以下错误之一,Rich 将引发 MarkupError

  • 不匹配的标记,例如 "[bold]Hello[/red]"

  • 隐式关闭没有匹配的标记,例如 "no tags[/]"

转义

有时你可能想打印一些 Rich 会解释为标记的内容。你可以通过在标记前加一个反斜杠来转义一个标记。以下是一个示例

>>> from rich import print
>>> print(r"foo\[bar]")
foo[bar]

如果没有反斜杠,Rich 会假设 [bar] 是一个标记,如果不存在“bar”样式,则会将其从输出中删除。

注意

如果你想阻止反斜杠转义标记并输出标记前的文字反斜杠,你可以输入两个反斜杠。

函数 escape() 将为你处理文本的转义。

如果你动态构建控制台标记,使用 str.format 或 f 字符串(例如),转义很重要。如果不转义,可能会在你不想的地方注入标记。考虑以下函数

def greet(name):
    console.print(f"Hello {name}!")

调用 greet("Will") 会打印问候语,但如果你调用 greet("[blink]Gotcha![/blink]"),那么你也会得到闪烁的文本,这可能不是你想要的。解决方案是转义参数

from rich.markup import escape
def greet(name):
    console.print(f"Hello {escape(name)}!")

表情符号

如果你在标记中添加一个表情符号代码,它将被替换为等效的 Unicode 字符。表情符号代码由冒号(:)包围的表情符号名称组成。以下是一个示例

>>> from rich import print
>>> print(":warning:")
⚠️

有些表情符号有两个变体, “emoji”变体以全彩显示,而“text”变体以单色显示(无论你的默认颜色设置为哪种)。你可以通过在表情符号代码中添加 “-emoji”“-text” 来指定你想要的变体。以下是一个示例

>>> from rich import print
>>> print(":red_heart-emoji:")
>>> print(":red_heart-text:")

要查看所有可用表情符号的列表,请运行以下命令

python -m rich.emoji

渲染标记

默认情况下,当你明确地将字符串传递给 print() 或当你在其他可渲染对象(例如 TablePanel)中嵌入字符串时,Rich 会渲染控制台标记。

控制台标记很方便,但如果你想打印的字符串与语法冲突,你可能希望禁用它。你可以通过在 print() 方法或 Console 构造函数上设置 markup=False 来做到这一点。

标记 API

你可以通过调用 from_markup() 将字符串转换为带样式的文本,它将返回一个 Text 实例,你可以打印它或添加更多样式。