跳转至

Rich基础

文档

颜色


基础

from rich.console import Console

console = Console()

输出

# 打印
console.print(":1st_place_medal:")
# 日记
console.log("Hello, World!")
# json
console.print_json('[false, true, null, "foo"]')

标记

print("[bold red]Hi[/] Hello")
print("Visit my [link=https://www.google.com]blog[/link]!")

style

style 是 Console与print的属性

white on blue 文字与背景颜色

boldb 粗体

blink 闪烁

reverser 前景和背景颜色反转

underlineu 下划线

strikes 删除线


布局

overflow="fold"  # 换行
overflow="crop"  # 多出不显示
overflow="ellipsis"  # 多出省略号
justify="left"  # 方向
width=12  # 宽度

Layout

from rich.layout import Layout

layout = Layout()

# 上线布局
layout.split_column(
    Layout(name="upper"),
    Layout(name="lower")
)

# 左右布局
layout["lower"].split_row(
    Layout(name="left"),
    Layout(name="right"),
)

# 添加布局
layout["right"].split(
    Panel("World!"),
    Panel("World!")
)

# 更新布局
layout["left"].update(
    Layout(Panel("Hello")),
)

print(layout.tree) 打印布局结果

layout["left"].size =10 大小 也可以None为取消限制

layout["left"].ratio=2 弹性2各

layout["lower"].minimum_size=10 最小大小

layout["upper"].visible=False 最大大小


组件

分割线

console.rule("[bold red]名称")

边框

from rich.panel import Panel

Panel("内容")
title="标题" # 标题

title_align="left" # 标题方向

subtitle="副标题" # 副标题

subtitle_align="right" # 副标题方向

expand=True # 是否扩展

padding=1padding=(1,2) # 内边距

from rich.console import Group

# 分组
panel_group = Group(
    Panel("Hello", style="on blue"),
    Panel("World", style="on red"),
)

进度条

from rich.progress import track

for i in track(range(20), description="Processing..."):
    print(i)
    time.sleep(1)  # Simulate work being done
from rich.progress import Progress

with Progress() as progress:
    task1 = progress.add_task("[red]Downloading...", total=1000)
    task2 = progress.add_task("[green]Processing...", total=1000)
    task3 = progress.add_task("[cyan]Cooking...", total=1000)

    while not progress.finished:
        progress.update(task1, advance=0.5)
        progress.update(task2, advance=0.3)
        progress.update(task3, advance=0.9)
        time.sleep(0.001)

表格

边框颜色风格

from rich.console import Console
from rich.table import Table, Column
from rich import box

table = Table(title="我的完美表格")

box=box.ASCII2 边框颜色风格

show_header=True 是否 显示头

expand=False 是否 适应宽度

show_lines=False 是否 显示行之间的线条

show_footer=False 是否 显示页脚

padding=1padding=(1,2) 内边距

style="#003C43" 适用于整个桌子的样式

border_style="red" 边框颜色

row_styles=["red", "blue", "#003C43"] 行与行的内容循环显示颜色

header_style="red" 头部标题样式

title_style="red" title标题样式

footer_style="" 页脚样式

caption="标题" 页脚标题

caption_style="red" 页脚标题样式

highlight=False 是否 启动自动高亮显示

# 表格头部
table.add_column("标题", style="cyan",  header_style="red")

justify="right" 方向

width=50 宽度

min_width=50 最小宽度

max_width=50 最大宽度

style="red" 列颜色

header_style="red" 标题颜色

# 行数据
table.add_row("内容1", "内容2", "内容3")

持续更新表格

import time

from rich.live import Live
from rich.table import Table

table = Table()
table.add_column("Row ID")
table.add_column("Description")
table.add_column("Level")

with Live(table, refresh_per_second=4):  # update 4 times a second to feel fluid
    for row in range(12):
        time.sleep(0.4)  # arbitrary delay
        # update the renderable internally
        table.add_row(f"{row}", f"description {row}", "[red]ERROR")

功能

# 等待执行完成
with console.status("Monkeying around...", spinner="aesthetic"):
    time.sleep(1)
# 全凭阅读 按q退出
with console.pager():
    console.print("内容")
# 全凭阅读 等待执行完成退出
with console.screen():
    console.print("内容")
    time.sleep(2)

颜色

console.print("Hello", style="magenta")
console.print("Hello", style="color(6)")
console.print("Hello", style="#ab3a3a")
console.print("Hello", style="rgb(175,50,175)")

输入

# 输入
console.input("内容")
from rich.prompt import Prompt
name = Prompt.ask("请输入")

name = Prompt.ask("请输入", default="默认值")

# 不在选项内不被接受 并需要重新输入
name = Prompt.ask("请输入", choices=["选项", "选项", "选项"], default="默认值")
from rich.prompt import Confirm

is_rich_great = Confirm.ask("是否确认?",)

password=True 密码


emoji

符号

python -m rich.emoji


扩展

Markdown

from rich.console import Console
from rich.markdown import Markdown

console = Console()
md = Markdown(MARKDOWN)
console.print(md)

代码渲染

主体

from rich.console import Console
from rich.syntax import Syntax

console = Console()
syntax = Syntax.from_path("test.py", line_numbers=True, theme="vim")
console.print(syntax)

background_color="#ff0000" 背景颜色