Skip to main content

An abstraction layer over UI libraries in Python

Project description


aui is an abstraction layer over user interfaces in Python. It aims to wrap popular ui libraries so that they have common API.

Write code once and import different backend to render the application using different UI library.

Available backends:


pip install aui

Sample application

import aui_tk
from aui import App
from aui.widgets import (
    Horizontal as H,
    Vertical as V

user_output = Label('output')
user_input = Input()

def set_output(value):
    user_output.text = value

ui = V( H( Button('submit', onclick=lambda _button: set_output(user_input.value))
         , user_input
      , user_output
App(ui, title="Sample application").run()

How to use

Import a backend, create an App with ui and run it! ui is just a widget (or nested widgets):

from aui import App
from aui.widgets import Label
import aui_tk



aui.App(ui, title)

  • ui Widget
    a widget to be used as the user interface
  • title str
    an application title


  • run() -> void
    runs the application


All the widgets can be imported from aui.widgets.

UI elements

aui.widgets.Button(text, onclick)

Represents button

  • text str
    button text
  • onclick function: Button -> void (default: None)
    function invoked after pressing the button

additional attributes:

  • wide
    using once makes the button wide

aui.widgets.Checkbox(text, selected, onchange)

Represents checkbox

  • text str
    checkbox text
  • selected boolean (default: False)
    whether the checkbox is selected on init
  • onchange function: Checkbox -> void (default: None)
    function invoked after toggling the checkbox

aui.widgets.Input(value, onenter)

Represents single line input field

  • value str (default: "")
    default value
  • onenter function: Input -> void (default: None)
    function called after the return key is pressed

additional attributes:

  • wide
    using once makes the input wide


Represents label

  • text str
    label text


Represents multiline input field

  • text str (default: "")
    widget text



Represents horizontal container

  • *children [Widget]
    widgets to be displayed horizontally


  • append(Widget) Widget -> void
    appends given widget to the container


Represents vertical container

  • *children [Widget]
    widgets to be displayed vertically


  • append(Widget) Widget -> void
    appends given widget to the container


UI code (containers’ content) should be indented as follows:

H( Button('button#1')
 , Label('label#1')
 , H( V( Checkbox('checkbox#1')
       , Button('button#2')
    , Text()
    , Input()

How to contribute

  1. Implement more backends (urwind, ncurses, qt, wxwidgets, gtk, cocoa)
  2. Discuss the API
  3. Spread the word! ;)

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for aui, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size aui-0.1.1-py3-none-any.whl (7.5 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page