🚀 原文地址:https://rich.readthedocs.io/en/latest/text.html

Rich 当中有一个Text类,我们可以使用它来给字符串添加颜色和样式。在任何可接收字符串的地方都可以使用Text实例,这将使得我们能对终端显示进行有效控制。

我们可以将Text类视为带有标记的文本区域的字符串,与内置的str不同的是,Text实例是可变的,并且大多数方法可以就地操作,而不是返回新的实例。

Rich 共有 4 种方法来使文本变为富文本:

  • 使用stylize方法
  • 使用append方法
  • 使用from_ansi方法
  • 使用assemble方法
  • 使用highlight_words方法
  • 使用highlight_regex方法

    1. stylize

    对于Text实例而言,我们可以使用stylize方法添加样式,并可以选择渲染字符串的开始和结束位置。最终终端中将输出的“Hello, World!”,并且第一个单词会以粗体红色样式显示: ```python 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)

  1. <a name="cCZKN"></a>
  2. # 2. append
  3. 另外一种方法就是,使用`Text`实例`append`方法(注意不是 Python 内置的`append`方法),通过`append`方法中的`style`参数来添加样式:
  4. ```python
  5. from rich.console import Console
  6. from rich.text import Text
  7. console = Console()
  8. text = Text()
  9. text.append("Hello", style="bold magenta")
  10. text.append(" World!")
  11. console.print(text)

3. from_ansi

熟悉 Shell 脚本的同学应该不陌生,我们可以通过\033[0;32m \033[0m来给终端输出进行高亮,其实在 Python 也是一样,在字符串中添加这些会使得文本具备样式。Rich 的Text实例也提供了from_ansi方法,用来直接渲染此类字符串(如果你的字符串已经使用 ANSI 代码格式化):

  1. from rich.console import Console
  2. from rich.text import Text
  3. console = Console()
  4. text = Text.from_ansi("\033[0;32mHello, World!\033[0m")
  5. console.print(text)

4. assemble

接下来介绍的是使用assemble方法,它将组合字符串或带样式的字符串(这种方式允许我们对每个单词进行操作,从而具备更高的自由度),从而实现对文本添加样式:

  1. from rich.console import Console
  2. from rich.text import Text
  3. console = Console()
  4. text = Text.assemble(("Hello", "bold magenta"), " World!")
  5. console.print(text)

5. highlight_words

highlight_words用于对文本中的单词进行高亮,该方法会返回一个整数值,表示文本中有多少单词将被高亮:

  1. from rich.console import Console
  2. from rich.text import Text
  3. text = Text("hello, hello world!1 2 3 zzz")
  4. text.highlight_words(words=['hello'], style="bold magenta") # 2

6. highlight_regex

highlight_regex是使用正则来找出字符串中匹配的部分进行高亮:

  1. from rich.console import Console
  2. from rich.text import Text
  3. text = Text("hello, hello world!1 2 3 zzz")
  4. text.highlight_regex('\d+', style="bold magenta") # 3

7. 文本属性

Text类有许多参数,我们可以在构造函数中设置这些参数来修改文本的显示方式:

  • justify:文本位置显示位置 ,主要有leftcenterright以及full四个选项
  • overflow:文本的流动效果,主要有fold(折叠)、corp(裁剪)以及ellipsis(省略号)
  • no_wrap:如果文本较长,则防止对文本进行包装
  • tab_size:设置缩进的字符个数

🌂 文本属性的设置必须结合Panel实例,才会产生效果

在 Rich API 中,可以使用Text实例来代替普通的字符串,它使得对于文本的渲染控制具备更大的自由度。例如,以下示例Panel中的文本对齐采用右对齐:

  1. from rich import print
  2. from rich.panel import Panel
  3. from rich.text import Text
  4. panel = Panel(Text("Hello", justify="right"))
  5. print(panel)