snakia/examples/tui.py
2025-11-23 10:49:54 +00:00

39 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()