46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from rich.text import Text
|
|
|
|
from textual.app import App, ComposeResult
|
|
from textual.containers import Horizontal, VerticalScroll
|
|
from textual.widgets import Label, RadioButton, RadioSet
|
|
|
|
|
|
class RadioSetChangedApp(App[None]):
|
|
CSS_PATH = "radio_set_changed.tcss"
|
|
|
|
def compose(self) -> ComposeResult:
|
|
with VerticalScroll():
|
|
with Horizontal():
|
|
with RadioSet(id="focus_me"):
|
|
yield RadioButton("Battlestar Galactica")
|
|
yield RadioButton("Dune 1984")
|
|
yield RadioButton("Dune 2021")
|
|
yield RadioButton("Serenity", value=True)
|
|
yield RadioButton("Star Trek: The Motion Picture")
|
|
yield RadioButton("Star Wars: A New Hope")
|
|
yield RadioButton("The Last Starfighter")
|
|
yield RadioButton(
|
|
Text.from_markup(
|
|
"Total Recall :backhand_index_pointing_right: :red_circle:"
|
|
)
|
|
)
|
|
yield RadioButton("Wing Commander")
|
|
with Horizontal():
|
|
yield Label(id="pressed")
|
|
with Horizontal():
|
|
yield Label(id="index")
|
|
|
|
def on_mount(self) -> None:
|
|
self.query_one(RadioSet).focus()
|
|
|
|
def on_radio_set_changed(self, event: RadioSet.Changed) -> None:
|
|
self.query_one("#pressed", Label).update(
|
|
f"Pressed button label: {event.pressed.label}"
|
|
)
|
|
self.query_one("#index", Label).update(
|
|
f"Pressed button index: {event.radio_set.pressed_index}"
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
RadioSetChangedApp().run()
|