862 字
4 分钟
控制台富文本 UI 库 Rich 学习笔记(二)
NOTE续接上文,本节主要介绍常用组件对象Panel、Table、布局介绍、常用状态组件
Panel组件使用
Panel 用于将内容包裹在边框中,适合用来突出显示日志、警告或分组信息。
核心功能
from rich.panel import Panelfrom rich import box
# 基础面板console.print(Panel("基础面板", style="green"))
# 带标题console.print(Panel("带标题面板", style="blue", title="标题", subtitle="副标题"))
# 不同边框样式console.print("-----不同边框样式-----", style="red")console.print(Panel("SQUARE 边框", box=box.SQUARE))console.print(Panel("DOUBLE_EDGE 边框", box=box.DOUBLE_EDGE))console.print(Panel("ROUNDED 圆角", box=box.ROUNDED))console.print(Panel("HEAVY 粗边框", box=box.HEAVY))console.print(Panel("SIMPLE 简单", box=box.SIMPLE))
# 颜色与对齐console.print(Panel("[bold green]绿色内容[/]",border_style="bright_blue",title="[yellow]左上标题[/]",subtitle="[cyan]右下副标题[/]"))
# 内边距console.print(Panel("内容", padding=(1, 2))) # (上下,左右)console.print(Panel(Panel("嵌套面板"), padding=(1, 2))) # (上下,左右)

控制台的Rule实际就是一条分割线,类似网页的<hr/>,其也可如文字一样设置颜色,宽度通过控制台宽度控制
console.rule("控件部分展示(Panel、table、布局、Status组件)", style="red")
Table组件使用
Table 是 Rich 最强大的功能之一,可以自动对齐列,支持复杂的样式定制。
核心功能:
- 列定义:add_column 设置列名、样式、对齐方式。
- 行数据:add_row 添加数据。
- 表格样式:控制是否显示表头、行线、边框风格。
from rich.table import Table
# 基础表格 table = Table(title="宠物信息表",box=box.SQUARE, header_style="bold") # 默认表头加粗不好看设置box.SQUARE恢复正常 table.add_column("ID", style="cyan", justify="center") table.add_column("名称", style="magenta") table.add_column("种类", style="green") table.add_column("年龄", justify="right")
table.add_row("1", "小白", "狗", "3") table.add_row("2", "咪咪", "猫", "2") table.add_row("3", "豆包", "仓鼠", "1")
console.print(table)
# 更多配置 table = Table( show_header=True, # 显示表头 show_lines=True, # 显示行线 header_style="bold", # 表头样式 border_style="blue", # 边框颜色 box=box.ROUNDED, # 边框样式 padding=(0, 1), # 单元格内边距 )
table.add_column("ID", style="cyan", justify="center") table.add_column("名称", style="magenta") table.add_column("种类", style="green") table.add_column("年龄", justify="right")
table.add_row("1", "小白", "狗", "3") table.add_row("2", "咪咪", "猫", "2") table.add_row("3", "豆包", "仓鼠", "1")
console.print(table)

布局配置
Rich 提供了 Align、Columns 和 Grid 来管理复杂的终端布局。
其中:
- Align:控制文本或组件的水平/垂直对齐(左、中、右)。
- Columns:将多个组件并排显示(类似 Flex 布局)。
- Grid:使用表格结构进行网格布局(不显示边框)。
console.print(Align.center("布局展示", style="on red")) console.print() console.print() # 文本对齐 console.print(Align.center("[bold]居中对齐[/]"), style="on yellow") console.print(Align.right("[bold]右对齐[/]"), style="on red") console.print(Align.left("[bold]左对齐[/]"), style="on green") # 默认
# 垂直对齐(需指定高度) console.print(Align.center("垂直居中", vertical="middle"), style="on blue")
# 多列布局 panels = [ Panel("第一个Panel"), Panel("第二个Panel"), Panel("第三个Panel"), ] console.print(Columns(panels, equal=True)) # equal=True 等宽
# 网格布局 from rich.table import Table grid = Table.grid(padding=1) grid.add_row("单元格 1", Panel("第二个Panel"), "单元格 3") grid.add_row(Panel("第四个Panel"), "单元格 5", "单元格 6") grid.add_row("单元格 7", "单元格 8", Panel("第九个Panel")) console.print(grid)
常用状态组件
在长时间任务中,给用户反馈至关重要。Rich 提供了三种主要组件: Progress:已知总量的任务(如下载文件)。 Spinner:未知总量的加载动画(如等待网络请求)。 Status:简单的状态提示消息。
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn import time # 进度条 with Progress( SpinnerColumn(), TextColumn("[bold blue]{task.description}"), BarColumn(), TextColumn("[progress.percentage]{task.percentage:>3.1f}%"), ) as progress: task = progress.add_task("处理中...", total=100) for i in range(100): time.sleep(0.05) progress.update(task, advance=1)
# 旋转加载器 from rich.spinner import Spinner console.print(Spinner("dots", text="加载中..."))
# 状态消息 with console.status("[bold green]正在处理..."): time.sleep(5) console.print("✅ 完成!")进度条

旋转加载器

状态消息

控制台富文本 UI 库 Rich 学习笔记(二)
https://blog.wentianlivas.top/posts/控制台富文本ui库rich学习笔记二/