控制台标记¶
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[/]"
链接¶
控制台标记可以使用以下语法输出超链接:[link=URL]text[/link]
。以下是一个示例
print("Visit my [link=https://www.willmcgugan.com]blog[/link]!")
如果你的终端软件支持超链接,你将能够点击“博客”这个词,这通常会打开一个浏览器。如果你的终端不支持超链接,你会看到文本,但它不可点击。
转义¶
有时你可能想打印一些 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()
或当你在其他可渲染对象(例如 Table
或 Panel
)中嵌入字符串时,Rich 会渲染控制台标记。
控制台标记很方便,但如果你想打印的字符串与语法冲突,你可能希望禁用它。你可以通过在 print()
方法或 Console
构造函数上设置 markup=False
来做到这一点。
标记 API¶
你可以通过调用 from_markup()
将字符串转换为带样式的文本,它将返回一个 Text
实例,你可以打印它或添加更多样式。