tanmatsu 0.1.1

Creator: bradpython12

Last updated:

0 purchases

TODO
Add to Cart

Description:

tanmatsu 0.1.1

:~^:. :YJ?! .Y&J?^
%@@P! :GG&! ~@@&: .PGP? B@&~.
!@@% :&@J ^@@? .#@B. G@# ^!.
!@@% !^ :&@? ^@@? #@G :%~~~~~~~~~~~~~~^B@#~^~~~~~~~~~Y@@#Y^
~?!!!J@@Y~Y&&P^.&@&~!!!?&@&!!!!!&@B :!!~~~~~~~~~~~~~~B@&~~~~~~~~~~~~~~~!^
:~^:^::::%Y?%~.:@@J::::::::::::^PBY G@#
:& &@@?:.:%%: .. .... ^PG?: G@# .?~
PG B@& JJ%%%%%%?B#G?%%%%%J&&&J: ^?!!~~~~~~~~~~B@&!~~~~~~~%B@@B%.
~@P :@&: %@B^ .!~^^^^^^^^^P@@@&G!^^^^^^^^^^^~.
.#@? ?@J :&?^:::^#&:.:..::::JP?^ :G@G#@#~P%
P@G G#. .&@P!!%#@Y!!Y&#%!!%@@&% .Y@&? G@# :PB!
Y@! ^&~ ::.#@J .&@% !@&. #@% .J&&J. G@#. %##J:
.. YB%??!..#@J .#@% %@&. .#@% ^Y#B%. G@#. .?#@G?^.
.^!?&GGJ!: .#@J .#@% %@&. .#@% .%PBY^ B@#. .%G@@#PJ!~^.
.P&&#&%^ .&@J .&@% %@&: #@% .~J&J~ B@#. ^JB@@@#J^
~#! :&@J .&@? ?@@^~!%&@% ^?!^ .#@&. :!J^
:#&? ?J^ ^J?..:P#P! B@#:
^GGGGGG^ %P~ .. %P! ?P^ ?Y~ .Y&: ?P^ ?GGGGGG:. ^YPPJ^ .&Y %P~
.~!@@%~: .&@G B@@~ P@! G@L: Y@@~ :@@P ^~&G&~^ !@B~!&@^ :B&. &B%
#&. J@%@~ B@@#.&@! G@@A /@@@~ Y@@%. Y@% !@G^. ^/ :B#. &B%
.#&: .&!^&G B@Y&.P@! G@#B@&PG@~ :@<^G% Y@% \&BBG% :B#. &B%
.#&: J@! #@~ B@!!@@@! G@^\J@^G@~ Y@! &@: Y@% .: .B@~ :B# &B%
.&@: .&&%%?@G B@% J@@! G@~ ^/ G@~ :@#%^J@% Y@% %@P~~J@^ .#B%~B@~
.PP. !B? &G: ?B~ &G~ YG^ YG^ %B% &P. !B? %PBG&~ :YGBP!

About
Declarative TUI (Terminal User Interface) library, with layout features modelled after modern web components.
Widget objects can be created by defining a class that inherits from the desired widget class.
For example, a CSS flexbox-style widget that contains a text box and a button can be created declaratively, like so:
class NiceFlexBox(widgets.FlexBox):
text_box = widgets.TextBox(text="Hello World!")
button = widgets.Button(label="Button 2", callback=None)

class Meta:
border_label = "Nice FlexBox"

nice_flex_box = NiceFlexBox()

or imperatively, like so:
children = {
'text_box': widgets.TextBox(text="Hello World!"),
'button': widgets.Button(label="Button 2", callback=None)
}

nice_flex_box = widgets.FlexBox(children=children, border_label="Nice FlexBox")

Tanmatsu supports either style. The declarative syntax should be familiar with anyone who's used Django models before.
Example

which is given by the code:
from tanmatsu import Tanmatsu, widgets

class ButtonList(widgets.List):
class Meta:
border_label = "List"
children = [
widgets.Button(label="Button 1", callback=None),
widgets.Button(label="Button 2", callback=None),
widgets.Button(label="Button 3", callback=None),
]
item_height = 5

class VertSplit(widgets.FlexBox):
text_box = widgets.TextBox(border_label="Text Box", text="Hello World!")
text_log = widgets.TextLog(border_label="Text Log")
button_list = ButtonList()

class Meta:
flex_direction = widgets.FlexBox.HORIZONTAL


with Tanmatsu(title="Tanmatsu!") as t:
rw = VertSplit()
t.set_root_widget(rw)

for (i, v) in enumerate(rw.button_list.children):
v.callback = lambda i=i: rw.text_log.append_line(f"Button {i + 1} pressed")

t.loop()

Installation
pip install tanmatsu
Documentation
https://tanmatsu.readthedocs.io/en/latest/
Requirements

Python >=3.11
GNU/Linux
Full-featured terminal emulator (e.g., Gnome VTE)
A font with unicode symbols (e.g., Noto)

Dependencies

tri.declarative
parsy
wcwidth

Development dependancies:

sphinx

Development
Installing

If not running python 3.11, install pyenv.
Install poetry.
Run poetry install from the repository directory to set up a virtual environment with the necessary python version and packages

Running
poetry run python3 main.py
Testing
poetry run python3 -m unittest
Changelog
See CHANGELOG.md.
License
MIT. For more information, see LICENSE.md.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.