rich/examples/table_movie.py

208 lines
4.6 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
from contextlib import contextmanager
import time
from rich.console import Console
from rich.columns import Columns
2020-07-02 19:00:33 +00:00
from rich.table import Table
from rich.measure import Measurement
from rich import box
from rich.text import Text
from rich.live import Live
2020-07-02 19:00:33 +00:00
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:
with console:
yield
time.sleep(length * BEAT_TIME)
table = Table(show_footer=False)
table_centered = Columns((table,), align="center", expand=True)
2020-07-02 19:00:33 +00:00
console.clear()
with Live(
2021-02-06 16:28:00 +00:00
table_centered,
console=console,
screen=True,
refresh_per_second=10,
vertical_overflow="ellipsis",
):
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
table_width = Measurement.get(console, table, console.width).maximum
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 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
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
2020-07-02 19:00:33 +00:00
original_width = Measurement.get(console, table).maximum
for width in range(original_width, console.width, 2):
with beat(2):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(console.width, original_width, -2):
with beat(2):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(original_width, 90, -2):
with beat(2):
table.width = width
2020-07-02 19:00:33 +00:00
for width in range(90, original_width + 1, 2):
with beat(2):
table.width = width
2020-07-02 19:00:33 +00:00
with beat(2):
table.width = None