现场展示¶
进度条和状态指示器使用 live 显示以设置端子部件的动画。您可以使用 Live
班级。
要演示实时显示,请运行以下命令:
python -m rich.live
备注
如果您看到省略号“...”,这表示航站楼不够高,无法显示整张桌子。
基本用法¶
若要创建实时显示,请构造一个 Live
对象,并将其用作上下文管理器。现场显示将在上下文的持续时间内持续。您可以更新可渲染对象以更新显示:
import time
from rich.live import Live
from rich.table import Table
table = Table()
table.add_column("Row ID")
table.add_column("Description")
table.add_column("Level")
with Live(table, refresh_per_second=4): # update 4 times a second to feel fluid
for row in range(12):
time.sleep(0.4) # arbitrary delay
# update the renderable internally
table.add_row(f"{row}", f"description {row}", "[red]ERROR")
更新可渲染对象¶
还可以通过调用 update()
方法。如果要显示的信息过于动态,无法通过更新单个可渲染对象来生成,则这可能很有用。以下是一个示例:
import random
import time
from rich.live import Live
from rich.table import Table
def generate_table() -> Table:
"""Make a new table."""
table = Table()
table.add_column("ID")
table.add_column("Value")
table.add_column("Status")
for row in range(random.randint(2, 6)):
value = random.random() * 100
table.add_row(
f"{row}", f"{value:3.2f}", "[red]ERROR" if value < 50 else "[green]SUCCESS"
)
return table
with Live(generate_table(), refresh_per_second=4) as live:
for _ in range(40):
time.sleep(0.4)
live.update(generate_table())
备用屏幕¶
您可以通过设置来选择在“Alternate Screen”中显示实时显示 screen=True
在构造函数上。这将允许您的实时显示全屏显示,并在退出时恢复命令提示符。
您可以将此功能与结合使用 布局 以显示复杂的终端“应用”。
瞬变显示¶
通常,当您退出活动上下文管理器(或调用 stop()
)最后刷新的项目保留在终端中,光标在下面一行上。您还可以通过设置使实时显示在退出时消失 transient=True
在Live构造函数上。
自动刷新¶
默认情况下,实时显示每秒刷新4次。可以使用设置刷新率 refresh_per_second
关于 Live
构造函数。如果你知道你的更新不会那么频繁或更高,以获得更流畅的感觉,你应该将其设置为低于4的值。
如果您的更新不是很频繁,您可能希望完全禁用自动刷新,这可以通过设置 auto_refresh=False
在构造函数上。如果禁用自动刷新,则需要调用 refresh()
手动或 update()
使用 refresh=True
。
垂直溢流¶
默认情况下,如果可渲染对象对于终端来说太大,则实时显示将显示省略号。可以通过设置 vertical_overflow
关于 Live
构造函数。
“裁剪”显示可渲染到终端高度。其余的都藏起来了。
“省略号”与CROP相似,只是末尾的最后一行用“...”代替。这是默认行为。
“可见”将允许显示整个可渲染。请注意,在此模式下无法正确清除显示屏。
备注
一旦实时显示在非瞬时可渲染上停止,最后一帧将渲染为 visible 因为它不需要被清理。
打印/记录¶
Live类将创建一个内部控制台对象,您可以通过 live.console
。如果您打印或登录到此控制台,则会显示输出 above 现场表演。以下是一个示例:
import time
from rich.live import Live
from rich.table import Table
table = Table()
table.add_column("Row ID")
table.add_column("Description")
table.add_column("Level")
with Live(table, refresh_per_second=4) as live: # update 4 times a second to feel fluid
for row in range(12):
live.console.print(f"Working on row #{row}")
time.sleep(0.4)
table.add_row(f"{row}", f"description {row}", "[red]ERROR")
如果您有另一个要使用的控制台对象,请将其传递给 Live
构造函数。以下是一个示例:
from my_project import my_console
with Live(console=my_console) as live:
my_console.print("[bold blue]Starting work!")
...
备注
如果您正在传递文件控制台,则在离开实时上下文后,实时显示只会显示最后一项。
重定向标准输出/标准错误¶
为了避免破坏现场显示的视觉效果,Rich将重定向 stdout
和 stderr
以便您可以使用内置的 print
陈述。默认情况下,此功能处于启用状态,但您可以通过设置 redirect_stdout
或 redirect_stderr
至 False
。
筑巢生活¶
请注意,一次只能有一个活动上下文处于活动状态。下面的代码将引发 LiveError
因为Status还使用Live::
with Live(table, console=console):
with console.status("working"): # Will not work
do_work()
在实践中,这几乎不是问题,因为您可以在Live上下文中显示可呈现对象的任意组合。
实例¶
看见 table_movie.py 和 top_lite_simulator.py 查看更深层次的现场展示示例。