Merge pull request #968 from davep/fix-calculator

Update the calculator example to make all keyboard keys work again
This commit is contained in:
Will McGugan
2022-10-20 14:43:29 +01:00
committed by GitHub

View File

@@ -3,6 +3,7 @@ from decimal import Decimal
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual import events from textual import events
from textual.containers import Container from textual.containers import Container
from textual.css.query import NoMatches
from textual.reactive import var from textual.reactive import var
from textual.widgets import Button, Static from textual.widgets import Button, Static
@@ -19,15 +20,14 @@ class CalculatorApp(App):
value = var("") value = var("")
operator = var("plus") operator = var("plus")
KEY_MAP = { NAME_MAP = {
"+": "plus", "asterisk": "multiply",
"-": "minus", "slash": "divide",
".": "point", "underscore": "plus-minus",
"*": "multiply", "plus_minus_sign": "plus-minus",
"/": "divide", "percent_sign": "percent",
"_": "plus-minus", "equals_sign": "equals",
"%": "percent", "enter": "equals",
"=": "equals",
} }
def watch_numbers(self, value: str) -> None: def watch_numbers(self, value: str) -> None:
@@ -75,7 +75,10 @@ class CalculatorApp(App):
"""Called when the user presses a key.""" """Called when the user presses a key."""
def press(button_id: str) -> None: def press(button_id: str) -> None:
self.query_one(f"#{button_id}", Button).press() try:
self.query_one(f"#{button_id}", Button).press()
except NoMatches:
pass
self.set_focus(None) self.set_focus(None)
key = event.key key = event.key
@@ -84,8 +87,8 @@ class CalculatorApp(App):
elif key == "c": elif key == "c":
press("c") press("c")
press("ac") press("ac")
elif key in self.KEY_MAP: else:
press(self.KEY_MAP[key]) press(self.NAME_MAP.get(key, key))
def on_button_pressed(self, event: Button.Pressed) -> None: def on_button_pressed(self, event: Button.Pressed) -> None:
"""Called when a button is pressed.""" """Called when a button is pressed."""