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.0rc5

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.0rc5
File Size Uploaded
interactui-0.1.0rc5.tar.gz 13.8 kB Details

Built distribution (wheel)

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

Total release size: 35.7 kB

Release files / interactui-0.1.0rc5.tar.gz

Download URL interactui-0.1.0rc5.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ef8ba36347b3a95a8d2cd440f2c34ba72c44c91982291e08df212000221fa535
BLAKE2b-256 checksum
How to use checksums
b5176d67e840e1a0ed6324adee963771c60ed5ebc8b6e51339a212aec26cba4f
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.0rc5-py3-none-any.whl

Download URL interactui-0.1.0rc5-py3-none-any.whl
Size 21.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e9a83f8e349909aed9019ee7d69a7322671fb8be87db23c404e9324e26a69b2a
BLAKE2b-256 checksum
How to use checksums
970b163eefc1af20d5f1979474ca8579a7207cfc126a865407f7f4d0205df55d
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