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)
<a name="cCZKN"></a>
# 2. append
另外一种方法就是,使用`Text`实例`append`方法(注意不是 Python 内置的`append`方法),通过`append`方法中的`style`参数来添加样式:
```python
from rich.console import Console
from rich.text import Text
console = Console()
text = Text()
text.append("Hello", style="bold magenta")
text.append(" World!")
console.print(text)
3. from_ansi
熟悉 Shell 脚本的同学应该不陌生,我们可以通过\033[0;32m \033[0m
来给终端输出进行高亮,其实在 Python 也是一样,在字符串中添加这些会使得文本具备样式。Rich 的Text
实例也提供了from_ansi
方法,用来直接渲染此类字符串(如果你的字符串已经使用 ANSI 代码格式化):
from rich.console import Console
from rich.text import Text
console = Console()
text = Text.from_ansi("\033[0;32mHello, World!\033[0m")
console.print(text)
4. assemble
接下来介绍的是使用assemble
方法,它将组合字符串或带样式的字符串(这种方式允许我们对每个单词进行操作,从而具备更高的自由度),从而实现对文本添加样式:
from rich.console import Console
from rich.text import Text
console = Console()
text = Text.assemble(("Hello", "bold magenta"), " World!")
console.print(text)
5. highlight_words
highlight_words
用于对文本中的单词进行高亮,该方法会返回一个整数值,表示文本中有多少单词将被高亮:
from rich.console import Console
from rich.text import Text
text = Text("hello, hello world!1 2 3 zzz")
text.highlight_words(words=['hello'], style="bold magenta") # 2
6. highlight_regex
highlight_regex
是使用正则来找出字符串中匹配的部分进行高亮:
from rich.console import Console
from rich.text import Text
text = Text("hello, hello world!1 2 3 zzz")
text.highlight_regex('\d+', style="bold magenta") # 3
7. 文本属性
Text
类有许多参数,我们可以在构造函数中设置这些参数来修改文本的显示方式:
justify
:文本位置显示位置 ,主要有left
、center
、right
以及full
四个选项overflow
:文本的流动效果,主要有fold
(折叠)、corp
(裁剪)以及ellipsis
(省略号)no_wrap
:如果文本较长,则防止对文本进行包装tab_size
:设置缩进的字符个数
🌂 文本属性的设置必须结合
Panel
实例,才会产生效果
在 Rich API 中,可以使用Text
实例来代替普通的字符串,它使得对于文本的渲染控制具备更大的自由度。例如,以下示例Panel
中的文本对齐采用右对齐:
from rich import print
from rich.panel import Panel
from rich.text import Text
panel = Panel(Text("Hello", justify="right"))
print(panel)