This release is a pre-release and may not be stable for production use.
InteracTUI
Build interactive TUI applications based on the curses library.
InteracTUI provides a base App class that encapsulates a single-column layout made of Views.
Example
A basic TUI might look like :
from interactui import App, View
from interactui.view import Select, TextArea
from interactui.view.select import SelectOption
def quit_function(app: App, _view: View) -> None:
app.print("Bye !")
app.exit(0)
App().run(
[
TextArea("👋 Hi form InteracTUI", style={"border": "rounded", "margin": 5, "padding": (2, 10)}),
Select("What do you want to do ?", ["Not much", SelectOption("Quit", callback=quit_function)]),
]
)
Views
An app's layout is a collection of View objects. You can define your own views by inheriting from the View class or you can use one of the predefined views :
Select- select an option from multiple optionsMultiSelect- select one or more options from a checkbox-style list of optionsTextArea- display textTextAreaWithButton- display text with a dismissal buttonFloatingView- base for floating views
Key-bindings
Apps and Views can define attached key-bindings with associated callback functions executed on the key press.
Key-bindings are defined in the _key_bindings class variable.
class App: # or View
_key_bindings: ClassVar[list[KeyBinding]] = [...]
...
A key-bindings is made of :
- a
Key - a description
- a callback function
(App | View, Key, App) -> None
An App comes with the following base key-bindings:
<Ctrl-d>- Exit the app<Ctrl-k>- show key bindings
Predefined Views come with their key-bindings but you can also define your own. When inheriting form the View class, add your key-bindings in the _key_bindings class variable.
Style
The appearance of Views can be customized with the style parameter, taking a Style dictionary with the following format:
class Style(TypedDict, total=False):
# all sides | (top & bottom, left & right) | (top, right, bottom, left)
margin: SidesAmount
# all sides | (top & bottom, left & right) | (top, right, bottom, left)
padding: SidesAmount
# border:
# - "none": no border
# - "rounded": rounded corners
# - "squared": squared corners
border: Corner
# foreground font color
color: Color
# one or more font modifiers:
# - "bold"
# - "italic"
# - "dim"
# - "blink"
# - "reverse"
font_modifier: Modifier | tuple[Modifier, ...]
# background font color
background: Color
# number lines | "x%" where x is in (0, 1), percentage of total height
height: int | str
# number columns | "x%" where x is in (0, 1), percentage of total width
width: int | str
Installation
pip install interactui or uv add interactui
Metadata
Release files for interactui 1.0.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| interactui-1.0.0rc1.tar.gz | 15.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| interactui-1.0.0rc1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.0 kB
Release files / interactui-1.0.0rc1.tar.gz
| Download URL | interactui-1.0.0rc1.tar.gz |
|---|---|
| Size | 15.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
56f0ca4d458f83947ecbe3114d4d08a7b572e35144c73f2a49280d1d1f447a4d
|
|
BLAKE2b-256 checksum How to use checksums |
93863df993212e83c0dc4706205ccb3d3a842d9fa3a762d3712117b2d3b773ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / interactui-1.0.0rc1-py3-none-any.whl
| Download URL | interactui-1.0.0rc1-py3-none-any.whl |
|---|---|
| Size | 24.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
974854b1d6f57e98602b2273bebaa1349910165e8e928fd040762050bf8fea3e
|
|
BLAKE2b-256 checksum How to use checksums |
5c38aad653418a3dbaa5df8a751c297ac0491e1fa793319b75c7bdaa4e75b6cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|