Files

56 lines
1.3 KiB
Python

from textual.app import App
from textual.containers import Vertical
from textual.reactive import reactive
from textual.widget import Widget
from textual.widgets import Input
class WelcomeWidget(Widget):
who = reactive("World!")
total = reactive(15)
def on_mount(self):
default_styles = """
margin: 1;
padding: 1;
"""
self.set_styles(default_styles)
def render(self):
return f":partying_face: Hello, [b red]{self.who}[/]! ({self.total}/15)"
def watch_who(self, old_value, new_value):
self.log(
f"who attribute changed: old value: {old_value}, "
f"new value: {new_value} "
)
def compute_total(self):
return len(self.who)
class InputChangeApp(App):
def compose(self):
yield Vertical(
Input(placeholder="enter your name..."),
WelcomeWidget(classes="welcome"),
)
def on_input_changed(self, event: Input.Changed) -> None:
target = self.query_one(".welcome")
value = event.value
if len(value) > 15:
event.input.value = value[:15]
return
if not value:
target.who = "World!"
else:
target.who = value
if __name__ == '__main__':
app = InputChangeApp()
app.run()