diff --git a/docs/examples/widgets/button.py b/docs/examples/widgets/button.py index 74a910767..aa152a921 100644 --- a/docs/examples/widgets/button.py +++ b/docs/examples/widgets/button.py @@ -3,7 +3,7 @@ from textual.app import App, ComposeResult from textual.widgets import Button, Static -class ButtonsApp(App): +class ButtonsApp(App[str]): CSS_PATH = "button.css" def compose(self) -> ComposeResult: @@ -26,10 +26,11 @@ class ButtonsApp(App): ), ) - def on_button_pressed(self, _event: Button.Pressed) -> None: + def on_button_pressed(self, event: Button.Pressed) -> None: self.app.bell() + self.exit(str(event.button)) if __name__ == "__main__": app = ButtonsApp() - result = app.run() + print(app.run()) diff --git a/src/textual/widgets/_button.py b/src/textual/widgets/_button.py index f13c5294f..ceddb07f6 100644 --- a/src/textual/widgets/_button.py +++ b/src/textual/widgets/_button.py @@ -9,6 +9,7 @@ if sys.version_info >= (3, 8): else: from typing_extensions import Literal # pragma: no cover +import rich.repr from rich.console import RenderableType from rich.text import Text, TextType @@ -16,7 +17,7 @@ from .. import events from ..css._error_tools import friendly_list from ..message import Message from ..reactive import Reactive -from ..widget import Widget +from ..widgets import Static ButtonVariant = Literal["default", "primary", "success", "warning", "error"] _VALID_BUTTON_VARIANTS = {"default", "primary", "success", "warning", "error"} @@ -26,7 +27,7 @@ class InvalidButtonVariant(Exception): pass -class Button(Widget, can_focus=True): +class Button(Static, can_focus=True): """A simple clickable button.""" DEFAULT_CSS = """ @@ -196,6 +197,11 @@ class Button(Widget, can_focus=True): variant = Reactive.init("default") disabled = Reactive(False) + def __rich_repr__(self) -> rich.repr.Result: + yield from super().__rich_repr__() + yield "variant", self.variant, "default" + yield "disabled", self.disabled, False + def watch_mouse_over(self, value: bool) -> None: """Update from CSS if mouse over state changes.""" if not self.disabled: