富文本

Rich 有一个 Text 类,你可以用它来用颜色和样式属性标记字符串。你可以在任何接受字符串的地方使用 Text 实例,这给了你很多控制呈现方式的能力。

你可以将这个类看作是一个带有标记区域的字符串。与内置的 str 不同,Text 实例是可变的,大多数方法都在原处操作,而不是返回一个新实例。

为 Text 添加样式的一种方法是使用 stylize() 方法,该方法将样式应用于开始和结束偏移量。以下是一个例子

from rich.console import Console
from rich.text import Text

console = Console()
text = Text("Hello, World!")
text.stylize("bold magenta", 0, 6)
console.print(text)

这将向终端打印“Hello, World!”,第一个词以粗体洋红色显示。

或者,你可以通过调用 append() 来构造带样式的文本,将字符串和样式添加到 Text 的末尾。以下是一个例子

text = Text()
text.append("Hello", style="bold magenta")
text.append(" World!")
console.print(text)

如果你想使用已经用 ANSI 代码格式化的文本,请调用 from_ansi() 将其转换为 Text 对象

text = Text.from_ansi("\033[1mHello, World!\033[0m")
console.print(text.spans)

由于从部分构建 Text 实例是一个常见的需求,Rich 提供了 assemble(),它将组合字符串或字符串和样式对,并返回一个 Text 实例。以下示例等同于上面的代码

text = Text.assemble(("Hello", "bold magenta"), " World!")
console.print(text)

你可以使用 highlight_words() 为文本中的特定单词应用样式,或者为了最终控制,调用 highlight_regex() 来高亮显示与正则表达式匹配的文本。

文本属性

Text 类具有一些你可以在构造函数上设置的参数,以修改文本的显示方式。

  • justify 应该为“left”、“center”、“right”或“full”,并且将覆盖默认的对齐行为。

  • overflow 应该为“fold”、“crop”或“ellipsis”,并且将覆盖默认的溢出。

  • no_wrap 如果文本长于可用宽度,则阻止换行。

  • tab_size 设置制表符中的字符数。

Text 实例可以在 Rich API 中几乎所有需要普通字符串的地方使用,这让你可以控制文本在其他 Rich 可渲染对象中的呈现方式。例如,以下示例在 Panel 中右对齐文本

from rich import print
from rich.panel import Panel
from rich.text import Text
panel = Panel(Text("Hello", justify="right"))
print(panel)