You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的rich库中实现可滚动的终端进度条?

解决Rich进度条超出终端高度时的滚动问题

默认情况下Rich的Progress组件会自动适配终端高度,截断超出显示范围的任务。要实现可滚动的进度条列表,可以通过Live组件结合ScrollableView来实现,让所有进度条都能通过终端滚动查看。

实现代码

from rich.progress import Progress, TaskProgressColumn, TimeElapsedColumn, TimeRemainingColumn
from rich.live import Live
from rich.scrollable import ScrollableView
from time import sleep

# 定义与默认Progress一致的显示列(可根据需求调整)
columns = [
    TaskProgressColumn(),
    "[progress.description]{task.description}",
    TimeElapsedColumn(),
    TimeRemainingColumn(),
]

# 创建Progress实例并添加任务
progress = Progress(*columns)
tasks = [progress.add_task(f"Task {i}", total=100) for i in range(50)]

# 用ScrollableView包裹进度条,通过Live实时更新
with Live(ScrollableView(progress), refresh_per_second=10) as live:
    while not progress.finished:
        for task in tasks:
            progress.update(task, advance=1)
            sleep(0.1)

说明

  • 使用ScrollableView包裹Progress后,进度条区域不再受终端高度限制,终端支持滚动的情况下(鼠标滚轮、键盘上下箭头/PageUp/PageDown),可以查看所有任务。
  • 自定义columns是为了保持和原代码一致的进度条显示样式,你可以根据需求增减或调整列的内容。
  • refresh_per_second参数控制实时更新的频率,平衡显示流畅度和性能消耗。

内容的提问来源于stack exchange,提问作者Swargaraj Bhowmik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:17:41