from random import randint import time from textual.app import App, ComposeResult from textual.color import Color from textual.containers import Grid, Vertical from textual.widget import Widget from textual.widgets import Footer, Label class ColourChanger(Widget): # (1)! def on_click(self) -> None: self.styles.background = Color( randint(1, 255), randint(1, 255), randint(1, 255), ) class MyApp(App[None]): BINDINGS = [("l", "load", "Load data")] # (2)! CSS = """ Grid { grid-size: 2; } """ def compose(self) -> ComposeResult: yield Grid( ColourChanger(), Vertical(id="log"), ) yield Footer() def action_load(self) -> None: # (3)! time.sleep(5) # (4)! self.query_one("#log").mount(Label("Data loaded ✅")) MyApp().run()