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 0.1.0rc3
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-0.1.0rc3.tar.gz | 13.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| interactui-0.1.0rc3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.2 kB
Release files / interactui-0.1.0rc3.tar.gz
| Download URL | interactui-0.1.0rc3.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5903671239e04ef63f80e64527b8f1109a0cb5cb8cab051a27ac3d6dd90c1009
|
|
BLAKE2b-256 checksum How to use checksums |
ae4458bf049d7d1c748da878c159764235a368c1035c8a9905290a9424049311
|
| 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-0.1.0rc3-py3-none-any.whl
| Download URL | interactui-0.1.0rc3-py3-none-any.whl |
|---|---|
| Size | 21.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c30fd968c0fd12e00be4df52191c3e0d69187661517aa8513d5c795244cfebb9
|
|
BLAKE2b-256 checksum How to use checksums |
ad1c1cb45f4654db45db94445092344caedaea5716f18381df28eb97391758fe
|
| 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}
|