tips:info
续接上文,本节主要介绍常用组件对象Panel、Table、布局介绍、常用状态组件
Panel组件使用
Panel 用于将内容包裹在边框中,适合用来突出显示日志、警告或分组信息。
核心功能
from rich.panel import Panel
from 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("✅ 完成!")
进度条

旋转加载器

状态消息
