from __future__ import annotations from rich.table import Table from textual.app import App, ComposeResult from textual.widgets import Footer, Header, OptionList from textual.widgets.option_list import Option, Separator COLONIES: tuple[tuple[str, str, str, str], ...] = ( ("Aerilon", "Demeter", "1.2 Billion", "Gaoth"), ("Aquaria", "Hermes", "75,000", "None"), ("Canceron", "Hephaestus", "6.7 Billion", "Hades"), ("Caprica", "Apollo", "4.9 Billion", "Caprica City"), ("Gemenon", "Hera", "2.8 Billion", "Oranu"), ("Leonis", "Artemis", "2.6 Billion", "Luminere"), ("Libran", "Athena", "2.1 Billion", "None"), ("Picon", "Poseidon", "1.4 Billion", "Queenstown"), ("Sagittaron", "Zeus", "1.7 Billion", "Tawa"), ("Scorpia", "Dionysus", "450 Million", "Celeste"), ("Tauron", "Ares", "2.5 Billion", "Hypatia"), ("Virgon", "Hestia", "4.3 Billion", "Boskirk"), ) class OptionListApp(App[None]): CSS_PATH = "option_list.css" @staticmethod def colony(name: str, god: str, population: str, capital: str) -> Table: table = Table(title=f"Data for {name}", expand=True) table.add_column("Patron God") table.add_column("Population") table.add_column("Capital City") table.add_row(god, population, capital) return table def compose(self) -> ComposeResult: yield Header() yield OptionList(*[self.colony(*row) for row in COLONIES]) yield Footer() if __name__ == "__main__": OptionListApp().run()