mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Merge pull request #968 from davep/fix-calculator
Update the calculator example to make all keyboard keys work again
This commit is contained in:
@@ -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."""
|
||||||
|
|||||||
Reference in New Issue
Block a user