Skip to main content

Declarative Terminal User Interface Library

Project description

      :~^:.             :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

tanmatsu example screenshot

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

  1. If not running python 3.11, install pyenv.
  2. Install poetry.
  3. 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tanmatsu-0.1.1.tar.gz (35.1 kB view hashes)

Uploaded Source

Built Distribution

tanmatsu-0.1.1-py3-none-any.whl (41.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page