Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

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! ;)

Release History

This version
History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(7.5 kB) Copy SHA256 Hash SHA256
Wheel py3 May 29, 2017

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers DreamHost DreamHost Log Hosting