Skip to main content
Pre-release

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 options
  • MultiSelect - select one or more options from a checkbox-style list of options
  • TextArea - display text
  • TextAreaWithButton - display text with a dismissal button
  • FloatingView - 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.0rc4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for interactui 0.1.0rc4
File Size Uploaded
interactui-0.1.0rc4.tar.gz 13.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for interactui 0.1.0rc4
File Interpreter ABI Platform
interactui-0.1.0rc4-py3-none-any.whl Python 3 none any Details

Total release size: 35.3 kB

Release files / interactui-0.1.0rc4.tar.gz

Download URL interactui-0.1.0rc4.tar.gz
Size 13.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6b85cc3a2b86ab40a4bb7ae74dc55a7247a7360c20be65981690663389609187
BLAKE2b-256 checksum
How to use checksums
c699c3e8486416e0e044667f32b9a9002d5ac3b546214a40392537ceef9fdfdd
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.0rc4-py3-none-any.whl

Download URL interactui-0.1.0rc4-py3-none-any.whl
Size 21.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aa5fdeb0c1ea9d03722dae5d3fe8571827d0245cc114f58ee5aa75515d7dd665
BLAKE2b-256 checksum
How to use checksums
7f2ed9bfa1787a2960f7965fa1755335790da907629b37abb69493969fe01664
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}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page