mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
figlet sizes
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from rich.align import Align
|
||||
from rich.console import Console, ConsoleOptions, RenderResult
|
||||
from rich.padding import Padding
|
||||
from rich.text import Text
|
||||
|
||||
from textual.app import App
|
||||
@@ -15,6 +17,31 @@ except ImportError:
|
||||
font = Figlet(font="small")
|
||||
|
||||
|
||||
class FigletText:
|
||||
def __init__(self, text: str) -> None:
|
||||
self.text = text
|
||||
|
||||
def __rich_console__(
|
||||
self, console: Console, options: ConsoleOptions
|
||||
) -> RenderResult:
|
||||
size = min(options.max_width / 2, options.max_height)
|
||||
|
||||
text = self.text
|
||||
if size <= 4:
|
||||
yield Text(text, style="bold")
|
||||
return
|
||||
if size < 6:
|
||||
font_name = "mini"
|
||||
elif size < 8:
|
||||
font_name = "small"
|
||||
elif size < 10:
|
||||
font_name = "standard"
|
||||
else:
|
||||
font_name = "big"
|
||||
font = Figlet(font=font_name)
|
||||
yield Text(font.renderText(text).rstrip("\n"), style="bold")
|
||||
|
||||
|
||||
class CalculatorApp(App):
|
||||
async def on_load(self, event: events.Load) -> None:
|
||||
await self.bind("q,ctrl+c", "quit", "Quit")
|
||||
@@ -24,18 +51,15 @@ class CalculatorApp(App):
|
||||
layout = GridLayout(gap=(2, 1), gutter=1, align=("center", "center"))
|
||||
await self.push_view(View(layout=layout))
|
||||
|
||||
layout.add_column("col", max_size=20, repeat=4)
|
||||
layout.add_row("numbers", min_size=3, max_size=6)
|
||||
layout.add_row("row", max_size=10, repeat=5)
|
||||
layout.add_column("col", max_size=30, repeat=4)
|
||||
layout.add_row("numbers")
|
||||
layout.add_row("row", max_size=15, repeat=5)
|
||||
layout.add_areas(
|
||||
numbers="col1-start|col4-end,numbers", zero="col1-start|col2-end,row5"
|
||||
)
|
||||
|
||||
def make_text(text: str) -> Text:
|
||||
return Text(font.renderText(text).rstrip("\n"), style="bold")
|
||||
|
||||
def make_button(text: str) -> Button:
|
||||
return Button(make_text(text), style="white on rgb(51,51,51)")
|
||||
return Button(FigletText(text), style="white on rgb(51,51,51)")
|
||||
|
||||
buttons = {
|
||||
name: make_button(name)
|
||||
@@ -46,10 +70,11 @@ class CalculatorApp(App):
|
||||
for name in "/X-+=":
|
||||
buttons[name].style = "white on rgb(255,159,7)"
|
||||
|
||||
zero_text = make_text("0")
|
||||
numbers = Align.right(FigletText("0"), vertical="middle")
|
||||
|
||||
layout.place(
|
||||
*buttons.values(),
|
||||
numbers=Static(Align.right(zero_text)),
|
||||
numbers=Static(Padding(numbers, (0, 1)), style="white on rgb(51,51,51)"),
|
||||
zero=make_button("0"),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user