rich/examples/table_movie.py

197 lines
4.5 KiB
Python
Raw Normal View History

"""Same as the table_movie.py but uses Live to update"""
2020-07-02 19:00:33 +00:00
import time
2021-02-12 21:59:35 +00:00
from contextlib import contextmanager
2020-07-02 19:00:33 +00:00
2021-02-12 21:59:35 +00:00
from rich import box
from rich.align import Align
2020-07-02 19:00:33 +00:00
from rich.console import Console
2021-02-12 21:59:35 +00:00
from rich.live import Live
from rich.table import Table
2020-07-02 19:00:33 +00:00
from rich.text import Text
TABLE_DATA = [
[
"May 25, 1977",
"Star Wars Ep. [b]IV[/]: [i]A New Hope",
"$11,000,000",
"$1,554,475",
"$775,398,007",
],
[
"May 21, 1980",
"Star Wars Ep. [b]V[/]: [i]The Empire Strikes Back",
"$23,000,000",
"$4,910,483",
"$547,969,004",
],
[
"May 25, 1983",
"Star Wars Ep. [b]VI[/b]: [i]Return of the Jedi",
"$32,500,000",
"$23,019,618",
"$475,106,177",
],
[
"May 19, 1999",
"Star Wars Ep. [b]I[/b]: [i]The phantom Menace",
"$115,000,000",
"$64,810,870",
"$1,027,044,677",
],
[
"May 16, 2002",
"Star Wars Ep. [b]II[/b]: [i]Attack of the Clones",
"$115,000,000",
"$80,027,814",
"$656,695,615",
],
[
"May 19, 2005",
"Star Wars Ep. [b]III[/b]: [i]Revenge of the Sith",
"$115,500,000",
"$380,270,577",
"$848,998,877",
],
]
console = Console()
2020-07-03 16:17:37 +00:00
BEAT_TIME = 0.04
2020-07-02 19:00:33 +00:00
@contextmanager
def beat(length: int = 1) -> None:
2021-02-12 21:59:35 +00:00
yield
2020-07-02 19:00:33 +00:00
time.sleep(length * BEAT_TIME)
table = Table(show_footer=False)
2021-02-12 21:59:35 +00:00
table_centered = Align.center(table)
2020-07-02 19:00:33 +00:00
console.clear()
2021-02-12 21:59:35 +00:00
with Live(table_centered, console=console, screen=False, refresh_per_second=20):
2020-07-02 19:00:33 +00:00
with beat(10):
table.add_column("Release Date", no_wrap=True)
2020-07-02 19:00:33 +00:00
with beat(10):
table.add_column("Title", Text.from_markup("[b]Total", justify="right"))
2020-07-02 19:00:33 +00:00
with beat(10):
table.add_column("Budget", "[u]$412,000,000", no_wrap=True)
2020-07-02 19:00:33 +00:00
with beat(10):
table.add_column("Opening Weekend", "[u]$577,703,455", no_wrap=True)
2020-07-02 19:00:33 +00:00
with beat(10):
table.add_column("Box Office", "[u]$4,331,212,357", no_wrap=True)
2020-07-02 19:00:33 +00:00
with beat(10):
table.title = "Star Wars Box Office"
2020-07-02 19:00:33 +00:00
with beat(10):
table.title = (
"[not italic]:popcorn:[/] Star Wars Box Office [not italic]:popcorn:[/]"
)
2020-07-02 19:00:33 +00:00
with beat(10):
table.caption = "Made with Rich"
2020-07-02 19:00:33 +00:00
with beat(10):
table.caption = "Made with [b]Rich[/b]"
2020-07-02 19:00:33 +00:00
with beat(10):
table.caption = "Made with [b magenta not dim]Rich[/]"
2020-07-02 19:00:33 +00:00
for row in TABLE_DATA:
with beat(10):
table.add_row(*row)
2020-07-02 19:00:33 +00:00
with beat(10):
table.show_footer = True
2020-07-02 19:00:33 +00:00
2021-05-02 18:57:04 +00:00
table_width = console.measure(table).maximum
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[2].justify = "right"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[3].justify = "right"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[4].justify = "right"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[2].header_style = "bold red"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[3].header_style = "bold green"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[4].header_style = "bold blue"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[2].style = "red"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[3].style = "green"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[4].style = "blue"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[0].style = "cyan"
table.columns[0].header_style = "bold cyan"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[1].style = "magenta"
table.columns[1].header_style = "bold magenta"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[2].footer_style = "bright_red"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[3].footer_style = "bright_green"
2020-07-02 19:00:33 +00:00
with beat(10):
table.columns[4].footer_style = "bright_blue"
2020-07-02 19:00:33 +00:00
with beat(10):
table.row_styles = ["none", "dim"]
2020-07-02 19:00:33 +00:00
2020-07-03 16:17:37 +00:00
with beat(10):
table.border_style = "bright_yellow"
2020-07-02 19:00:33 +00:00
for box_style in [
2020-07-03 16:17:37 +00:00
box.SQUARE,
box.MINIMAL,
2020-07-02 19:00:33 +00:00
box.SIMPLE,
box.SIMPLE_HEAD,
]:
2020-07-03 16:47:36 +00:00
with beat(10):
table.box = box_style
2020-07-02 19:00:33 +00:00
2020-07-03 16:47:36 +00:00
with beat(10):
table.pad_edge = False
2020-07-03 16:17:37 +00:00
2021-05-02 18:57:04 +00:00
original_width = console.measure(table).maximum
2020-07-02 19:00:33 +00:00
for width in range(original_width, console.width, 2):
2021-02-12 21:59:35 +00:00
with beat(1):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(console.width, original_width, -2):
2021-02-12 21:59:35 +00:00
with beat(1):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(original_width, 90, -2):
2021-02-12 21:59:35 +00:00
with beat(1):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(90, original_width + 1, 2):
2021-02-12 21:59:35 +00:00
with beat(1):
table.width = width
2020-07-02 19:00:33 +00:00
with beat(2):
table.width = None