200字
控制台富文本UI库Rich学习笔记(二)
2026-03-08
2026-03-08
tips:info 续接上文,本节主要介绍常用组件对象Panel、Table、布局介绍、常用状态组件

控制台富文本UI库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学习笔记(二)
Author
Administrator
Published at
2026-03-08
License
CC BY-NC-SA 4.0

Comment