mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Initially we went with a RadioSet being a simple container of RadioButtons, with the user navigating the RadioButtons like you would any other set of widgets. This was fine but it became pretty clear pretty quickly that having to tab through a non-trivial collection of buttons in a set to get to the next widget wasn't ideal. This commit, satisfying #2368, takes over the navigation of the buttons within the container, makes the container itself a focusable widget, and sets up some new bindings to allow a more natural and efficient interaction with the set.
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from textual.app import App, ComposeResult
|
|
from textual.containers import Horizontal
|
|
from textual.widgets import RadioButton, RadioSet
|
|
|
|
|
|
class RadioChoicesApp(App[None]):
|
|
CSS_PATH = "radio_set.css"
|
|
|
|
def compose(self) -> ComposeResult:
|
|
with Horizontal():
|
|
# A RadioSet built up from RadioButtons.
|
|
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(
|
|
"Total Recall :backhand_index_pointing_right: :red_circle:"
|
|
)
|
|
yield RadioButton("Wing Commander")
|
|
# A RadioSet built up from a collection of strings.
|
|
yield RadioSet(
|
|
"Amanda",
|
|
"Connor MacLeod",
|
|
"Duncan MacLeod",
|
|
"Heather MacLeod",
|
|
"Joe Dawson",
|
|
"Kurgan, [bold italic red]The[/]",
|
|
"Methos",
|
|
"Rachel Ellenstein",
|
|
"Ramírez",
|
|
)
|
|
|
|
def on_mount(self) -> None:
|
|
self.query_one("#focus_me").focus()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
RadioChoicesApp().run()
|