表格¶
Rich 的 Table
类提供了多种方法将表格数据渲染到终端。
要渲染表格,请构造一个 Table
对象,使用 add_column()
添加列,使用 add_row()
添加行 - 然后将其打印到控制台。
以下是一个示例
from rich.console import Console
from rich.table import Table
table = Table(title="Star Wars Movies")
table.add_column("Released", justify="right", style="cyan", no_wrap=True)
table.add_column("Title", style="magenta")
table.add_column("Box Office", justify="right", style="green")
table.add_row("Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$952,110,690")
table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347")
table.add_row("Dec 15, 2017", "Star Wars Ep. V111: The Last Jedi", "$1,332,539,889")
table.add_row("Dec 16, 2016", "Rogue One: A Star Wars Story", "$1,332,439,889")
console = Console()
console.print(table)
这将产生以下输出
Star Wars Movies ┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓ ┃ Released ┃ Title ┃ Box Office ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩ │ Dec 20, 2019 │ Star Wars: The Rise of Skywalker │ $952,110,690 │ │ May 25, 2018 │ Solo: A Star Wars Story │ $393,151,347 │ │ Dec 15, 2017 │ Star Wars Ep. V111: The Last Jedi │ $1,332,539,889 │ │ Dec 16, 2016 │ Rogue One: A Star Wars Story │ $1,332,439,889 │ └──────────────┴───────────────────────────────────┴────────────────┘
Rich 将计算出最佳列大小以适应您的内容,如果终端宽度不足以容纳内容,它将自动换行文字。
注意
您不限于在 add_row
方法中添加文本。您可以添加 Rich 能够渲染的任何内容(包括另一个表格)。
表格选项¶
在 Table 构造函数中,您可以使用一些关键字参数来定义表格的样式。
title
设置表格标题(显示在表格上方的文本)。caption
设置表格标题(显示在表格下方的文本)。width
设置表格的所需宽度(禁用自动宽度计算)。min_width
设置表格的最小宽度。box
设置表格网格的 Box 样式之一,或设置为None
以不显示网格。safe_box
设置为True
以强制表格生成 ASCII 字符而不是 Unicode。padding
一个整数,或 1、2 或 4 个值的元组,用于设置单元格的填充。collapse_padding
如果为 True,将合并相邻单元格的填充。pad_edge
设置为 False 以删除表格边缘周围的填充。expand
设置为 True 以将表格扩展到可用大小。show_header
设置为 True 以显示标题,False 以禁用标题。show_footer
设置为 True 以显示脚注,False 以禁用脚注。show_edge
设置为 False 以禁用表格周围的边框。show_lines
设置为 True 以显示行之间的线以及标题/脚注。leading
行之间的额外空格。style
应用于整个表格的样式,例如“on blue”。row_styles
设置为样式列表以对交替行进行样式设置。例如["dim", ""]
以创建斑马条纹。header_style
设置标题的默认样式。footer_style
设置脚注的默认样式。border_style
设置边框字符的样式。title_style
设置标题的样式。caption_style
设置标题的样式。title_justify
设置标题对齐方式(“left”、“right”、“center” 或 “full”)。caption_justify
设置标题对齐方式(“left”、“right”、“center” 或 “full”)。highlight
设置为 True 以启用对单元格内容的自动突出显示。
边框样式¶
您可以通过导入预设的 Box
对象之一并在表格构造函数中设置 box
参数来设置边框样式。以下是一个修改星球大战表格外观的示例
from rich import box
table = Table(title="Star Wars Movies", box=box.MINIMAL_DOUBLE_HEAD)
请参阅 Box 以查看其他边框样式。
您也可以设置 box=None
以完全删除边框。
Table
类提供了许多配置选项来设置表格的外观,包括如何渲染边框以及列的样式和对齐方式。
线条¶
默认情况下,表格将在标题下方显示一条线。如果您想在所有行之间显示线,请在构造函数中添加 show_lines=True
。
您还可以通过在调用 add_row()
时设置 end_section=True
,或通过调用 add_section()
来在当前行和后续行之间添加一条线,来强制在下一行显示一条线。
空表格¶
打印一个没有列的表格将产生一个空白行。如果您正在动态构建表格,并且数据源没有列,您可能想打印其他内容。以下是如何操作:
if table.columns:
print(table)
else:
print("[i]No data...[/i]")
添加列¶
您也可以通过在 Table
构造函数的位置参数中指定列来添加列。例如,我们可以构造一个包含三个列的表格,如下所示:
table = Table("Released", "Title", "Box Office", title="Star Wars Movies")
这允许您仅指定列的文本。如果您想设置其他属性,例如宽度和样式,则可以添加 Column
类。以下是一个示例
from rich.table import Column, Table
table = Table(
"Released",
"Title",
Column(header="Box Office", justify="right"),
title="Star Wars Movies"
)
列选项¶
您可以设置列上的许多选项来修改其外观。
header_style
设置标题的样式,例如“bold magenta”。footer_style
设置脚注的样式。style
设置应用于列的样式。您可以使用它通过设置背景为“on green”来突出显示列,例如。justify
设置文本对齐方式为“left”、“center”、“right” 或 “full” 之一。vertical
设置列中单元格的垂直对齐方式,为“top”、“middle” 或 “bottom” 之一。width
明确将行的宽度设置为给定的字符数(禁用自动计算)。min_width
设置为整数时,将阻止列缩小到此值以下。max_width
设置为整数时,将阻止列扩展到此值以上。ratio
定义一个比率来设置列宽度。例如,如果有 3 列,总比率为 6,并且ratio=2
,则该列将占用可用大小的三分之一。no_wrap
设置为 True 以阻止此列换行。
垂直对齐¶
您可以通过设置列的 vertical
参数来定义列的垂直对齐方式。您也可以通过将文本或可渲染对象包装在 Align
类中来实现。
table.add_row(Align("Title", vertical="middle"))
网格¶
Table 类也可以成为一个很好的布局工具。如果您禁用标题和边框,您可以使用它在终端中定位内容。备用构造函数 grid()
可以为您创建一个这样的表格。
例如,以下代码显示两段文本,分别对齐到终端的左右边缘。
from rich import print
from rich.table import Table
grid = Table.grid(expand=True)
grid.add_column()
grid.add_column(justify="right")
grid.add_row("Raising shields", "[bold magenta]COMPLETED [green]:heavy_check_mark:")
print(grid)