tanmatsu 0.1.1

Creator: bradpython12

Last updated:

0 purchases

tanmatsu 0.1.1 Image
tanmatsu 0.1.1 Images

Languages

Categories

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 In This Product:

Customer Reviews

There are no reviews.