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 1.0.0rc1

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 1.0.0rc1
File Size Uploaded
interactui-1.0.0rc1.tar.gz 15.7 kB Details

Built distribution (wheel)

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