如何在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
相关产品推荐
相关产品推荐

