テーブル¶
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_boxTrueに設定すると、テーブルは Unicode ではなく ASCII 文字を生成するように強制されます。paddingセルにパディングを設定するための整数、または 1、2、または 4 つの値のタプル。collapse_paddingTrue の場合、隣接するセルのパディングはマージされます。pad_edgeFalse に設定すると、テーブルの端のパディングが削除されます。expandTrue に設定すると、テーブルをいっぱいに拡張します。show_headerヘッダーを表示するには True、無効にするには False に設定します。show_footerフッターを表示するには True、無効にするには False に設定します。show_edgeFalse に設定すると、テーブルの周りのエッジラインが無効になります。show_linesTrue に設定すると、ヘッダー/フッターだけでなく、行間の線も表示されます。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")highlightTrue に設定すると、セル内容の自動ハイライトが有効になります。
枠線スタイル¶
プリセットの 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_wrapTrue に設定すると、このカラムが折り返されなくなります。
垂直方向の配置¶
カラムの `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)