35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import sys
|
|
|
|
from snakia.core.tui import CanvasChar, RenderContext
|
|
from snakia.core.tui.render import ANSIRenderer
|
|
from snakia.core.tui.widgets import (BoxWidget, HorizontalSplitWidget,
|
|
TextWidget, VerticalSplitWidget)
|
|
|
|
|
|
class StdoutTarget:
|
|
def write(self, text: str) -> None:
|
|
sys.stdout.write(text)
|
|
|
|
def flush(self) -> None:
|
|
sys.stdout.flush()
|
|
|
|
|
|
def main() -> None:
|
|
text1 = TextWidget("Hello", CanvasChar(fg_color="red", bold=True))
|
|
text2 = TextWidget("World", CanvasChar(fg_color="blue", bold=True))
|
|
text3 = TextWidget("Snakia", CanvasChar(fg_color="green", bold=True))
|
|
|
|
box1 = BoxWidget(10, 3, CanvasChar("█", fg_color="yellow"))
|
|
box2 = BoxWidget(8, 5, CanvasChar("█", fg_color="magenta"))
|
|
|
|
horizontal_split = HorizontalSplitWidget([text1, text2, text3], "|")
|
|
vertical_split = VerticalSplitWidget([horizontal_split, box1, box2], "-")
|
|
|
|
renderer = ANSIRenderer(StdoutTarget())
|
|
|
|
with RenderContext(renderer) as ctx:
|
|
ctx.render(vertical_split.render())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|