テーブル¶
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
テーブルグリッドの ボックス スタイルのいずれか、またはグリッドなしの場合はNone
を設定します。safe_box
True
に設定すると、テーブルは Unicode ではなく ASCII 文字を生成するように強制されます。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
タイトルの justify メソッドを設定します("left"、 "right"、 "center"、または "full")caption_justify
キャプションの 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=None
を設定することもできます。
Table
クラスは、枠線のレンダリング方法、カラムのスタイルと配置など、テーブルのルックアンドフィールを設定するための多くの設定オプションを提供します。
線¶
デフォルトでは、テーブルはヘッダーの下にのみ線を表示します。すべての行の間に線を表示する場合は、コンストラクタに show_lines=True
を追加します。
add_row()
の呼び出しで end_section=True
を設定するか、add_section()
を呼び出して現在行と後続の行の間に線を追加することで、次の行に線を強制的に表示することもできます。
空のテーブル¶
カラムのないテーブルを出力すると、空白行が生成されます。テーブルを動的に構築していて、データソースにカラムがない場合は、別のものを出力したい場合があります。その方法を次に示します
if table.columns:
print(table)
else:
print("[i]No data...[/i]")
カラムの追加¶
Table
コンストラクタの位置引数でカラムを指定することで、カラムを追加することもできます。たとえば、次のように 3 つのカラムを持つテーブルを構築できます
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
テキストの justify を "left"、 "center"、 "right"、または "full" のいずれかに設定します。vertical
カラム内のセルの垂直方向の配置を "top"、 "middle"、または "bottom" のいずれかに設定します。width
行の幅を指定した文字数に明示的に設定します(自動計算を無効にします)。min_width
整数に設定すると、カラムがこの量より小さくならないようにします。max_width
整数に設定すると、カラムがこの量を超えて大きくならないようにします。ratio
カラム幅を設定するための比率を定義します。たとえば、合計比率が 6 の 3 つのカラムがあり、ratio=2
の場合、カラムは使用可能なサイズの 3 分の 1 になります。no_wrap
True に設定すると、このカラムが折り返されなくなります。
垂直方向の配置¶
カラムの `vertical` パラメータを設定することで、カラムの垂直方向の配置を定義できます。また、テキストまたはレンダリング可能オブジェクトを Align
クラスでラップすることで、セルごとにこれを行うこともできます
table.add_row(Align("Title", vertical="middle"))
グリッド¶
Table クラスは、優れたレイアウトツールとしても使用できます。ヘッダーとボーダーを無効にすると、ターミナル内にコンテンツを配置するために使用できます。代替コンストラクタである grid()
は、そのようなテーブルを作成できます。
たとえば、次のコードは、ターミナルの左右両端に揃えられた2つのテキストを1行に表示します。
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)