113 lines
2.6 KiB
Python
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() |