canvasapp/ui.py

113 lines
2.6 KiB
Python

from textual.app import App, ComposeResult
from textual.widgets import Placeholder, Static
from textual.containers import VerticalScroll
from textual import events
from textual.reactive import Reactive
from itertools import cycle
hellos = cycle(
[
"Hola",
"Bonjour",
"Guten tag",
"Salve",
"Nǐn hǎo",
"Olá",
"Asalaam alaikum",
"Konnichiwa",
"Anyoung haseyo",
"Zdravstvuyte",
"Hello",
]
)
class Hello(Static):
# Display a greeting.
DEFAULT_CSS = """
Hello {
width: 40;
height: 9;
padding: 1 2;
background: $panel;
border: $secondary tall;
content-align: center middle;
}
"""
def on_mount(self) -> None:
self.next_word()
def on_click(self) -> None:
self.next_word()
def next_word(self) -> None:
# Get a new hello and update the content area.
hello = next(hellos)
self.update(f"{hello}, [b]World[/b]!")
class MyApp(App):
async def startup(self):
await self.bind("q", "action_quit")
await self.push_view(self.control)
# Left area with numbers
numbers = "\n".join(str(i) for i in range(1, 501))
self.view.grid.set_focus("content")
h = Hello()
self.view.add_right(
#VerticalScroll(StrContent(numbers), name="Numbers"),
h,
width=50,
padding=(0,1),
)
# Right area with lorem ipsum placeholder
lorem_ipsum = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
"""
self.view.add_right(
# VerticalScroll(StrContent(lorem_ipsum), name="Lorem"),
Static(lorem_ipsum, name="Lorem"),
width=50,
padding=(0,1),
)
# Command input at the bottom
self.view.add_bottom(Static("Enter command: "), height=3)
def action_quit(self):
self.exit()
"""
class CanvasApp(App):
# A Textual app to manage canvas.
BINDINGS = [("d", "toggle_dark", "Toggle dark mode")]
def compose(self) -> ComposeResult:
# Create child widgets for the app.
yield Header()
yield Footer()
def quit(self):
self.exit()
def action_toggle_dark(self) -> None:
# An action to toggle dark mode.
self.dark = not self.dark
"""
def text_app():
app = MyApp()
app.run()
text_app()