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

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

Built distribution (wheel)

Table of built distributions (wheels) for interactui 0.1.0rc3
File Interpreter ABI Platform
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}
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