862 字
4 分钟
控制台富文本 UI 库 Rich 学习笔记(二)
NOTE

续接上文,本节主要介绍常用组件对象Panel、Table、布局介绍、常用状态组件

控制台富文本UI库Rich学习笔记(一)

Rich 官方文档

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))) # (上下,左右)

2026-03-08T00:04:29-zflvghjk.png

2026-03-08T00:04:45-gdkwutxl.png

控制台的Rule实际就是一条分割线,类似网页的<hr/>,其也可如文字一样设置颜色,宽度通过控制台宽度控制

console.rule("控件部分展示(Panel、table、布局、Status组件)", style="red")

2026-03-08T00:01:03-jruexdbz.png


Table组件使用#

Table 是 Rich 最强大的功能之一,可以自动对齐列,支持复杂的样式定制。

核心功能

  1. 列定义:add_column 设置列名、样式、对齐方式。
  2. 行数据:add_row 添加数据。
  3. 表格样式:控制是否显示表头、行线、边框风格。
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)

2026-03-08T00:09:01-pnclrwhr.png

2026-03-08T00:09:53-xowzfdjt.png


布局配置#

Rich 提供了 Align、Columns 和 Grid 来管理复杂的终端布局。

其中

  1. Align:控制文本或组件的水平/垂直对齐(左、中、右)。
  2. Columns:将多个组件并排显示(类似 Flex 布局)。
  3. 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)

2026-03-08T00:13:53-aflrglzm.png


常用状态组件#

在长时间任务中,给用户反馈至关重要。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("✅ 完成!")

进度条#

2026-03-08T00:18:41-hddabqen.png

旋转加载器#

2026-03-08T00:20:04-rxtfobet.png

状态消息#

2026-03-08T00:20:17-zxfgfdwx.png

控制台富文本 UI 库 Rich 学习笔记(二)
https://blog.wentianlivas.top/posts/控制台富文本ui库rich学习笔记二/
作者
Andy
发布于
2026-03-31
许可协议
CC BY-NC-SA 4.0