Python GUI Applications

Simple, usable, customizable ...


Look Ma ! No dependencies !

Tkinter has been somewhat neglected in favor of GTK, wxPython and QT for various reason, both technical and visuals. However, the core TK and Python developers have been plugging along over the years and many of the 'rough spots' that lead to the neglect Tkinter may no longer be true.


As Tkinter features have improved in the last years, there has been a growing population of Python developers looking for a light-weight, low-dependency Tkinter GUI builder, filling the same niche as Glade/GTK for Tkinter. The long search/wait may be over.

Recently, I downloaded a new version of pygubu and ran the demos and fiddled around with it a bit. It's not fully mature yet but it's quite usable ... in fact I'm probably going to use it for simple data entry.

Pygubu is a RAD tool to enable quick & easy development of user interfaces for the python tkinter module.

The user interfaces designed are saved as XML, and by using the pygubu builder these can be loaded by applications dynamically as needed. Pygubu is inspired by Glade.

Note: Tkinter supports callbacks, but if you are building more dynamic event driven application, better stick with GTK or QT.


nvpy is a simplenote-syncing note-taking tool inspired by Notational Velocity (and a little bit by nvALT too) on OSX and ResophNotes on Windows.

It is significantly uglier, but it is cross-platform ... you can run this on Linux (tested), Windows (tested) and OS X (lightly tested).

v0.9.4, 2012-10-24 -- vertical layout option; statusbar improvement.


PAGE springs from Virtual Tcl, a Tcl/Tk program, modified to generate Python modules that realizes the desired GUI. Tcl is required for running PAGE but is not required for executing the generated Python code.

PAGE is a tool which helps to create Tkinter GUI interfaces for use within Python programs. It is a rework or extension of the program Visual Tcl (Vtcl) which now produces Python code.

Lots of examples and documentation, but it's big. Download is 5MB.


See GTKApps

Cherry Tree

A hierarchical note taking application, featuring rich text and syntax highlighting, storing data in a single xml or sqlite file ...

depends: python2, python-gtk2, python-gtksourceview2, p7zip-full, python-enchant, python-dbus

Just download, unzip, 'python cherrytree' and Bob's your uncle.


Seems to be most desktop-ish ... and has most current updates. - Simple doc viewer


A new entry ... still vague on how well it works but it may be an easier route to cross-platform applications than GTK ...

See QTApps

PyQt is one of the two most popular Python bindings for the Qt cross-platform GUI/XML/SQL C++ framework (another binding is PySide)

Notable applications that use PyQt

Anki, a spaced repetition flashcard program
Eric Python IDE
Kodos, Python Regular Expression Debugger
Orange, a data mining and visualization framework
qt-recordMyDesktop, Qt4 frontend for recordMyDesktop
QGIS, a free software desktop Geographic Information Systems (GIS) application
Veusz, a scientific plotting application
Spyder, a lightweight Python IDE
Leo, an outliner and literate programming editor
Ninja-IDE, an extensible open-source Python IDE
Calibre, an E-book management application
Puddletag, an open-source, cross-platform ID3 tag editor
TortoiseHg, a graphical interface for the Mercurial source management program (Hg)

PySide is LGPL-licensed Python bindings for the Qt (framework for cross-platform UI and applications).


Fairly complicated with fairly complicated dependencies, but high quality and worth a look.

Kivy runs on Linux, Windows, OS X, Android and iOS. You can run the same code on all supported platforms.

It can use natively most inputs, protocols and devices including WM_Touch, WM_Pen, Mac OS X Trackpad and Magic Mouse, Mtdev, Linux Kernel HID, TUIO. A multi-touch mouse simulator is included.

Using Kivy on your computer, you can create apps that run on:

Desktop computers: MacOSX, Linux, Windows.

iOs Devices: iPad, iPhone.

Android devices: Tablets, phones.

Any other touch-enabled professional/homebrew devices supporting TUIO (Tangible User Interface Objects)

Core Providers and Input Providers

OSX, Linux and Windows, there are different native APIs for the different core tasks. A piece of code that uses one of these specific APIs to talk to the operating system on one side and to Kivy on the other (acting as an intermediate communication layer) is what we call a core provider.


the core package provides commonly used features, such as:

Clock - You can use the clock to schedule timer events. Both one-shot timers and periodic timers are supported.

Cache - If you need to cache something that you use often, you can use our class for that instead of writing your own.

Gesture Detection - We ship a simple gesture recognizer that you can use to detect various kinds of strokes, such as circles or rectangles. You can train it to detect your own strokes.

Kivy Language - The kivy language is used to easily and efficiently describe user interfaces.

Properties - These are not the normal properties that you may know from python. They are our own property classes that link your widget code with the user interface description.

UIX (Widgets & Layouts

Widgets - Widgets are user interface elements that you add to your program to provide some kind of functionality. They may or may not be visible. Examples would be a file browser, buttons, sliders, lists and so on. Widgets receive MotionEvents.

Layouts - You use layouts to arrange widgets. It is of course possible to calculate your widgets’ positions yourself, but often it is more convenient to use one of our ready made layouts. Examples would be Grid Layouts or Box Layouts. You can also nest layouts.


Modules can be used to inject functionality into Kivy programs, even if the original author did not include it.

Input Events (Touches)

Kivy abstracts different input types and sources such as touches, mice, TUIO or similar.

Widgets and Event Dispatching

In Kivy, a widget is an object that receives input events. It does not necessarily have to have a visible representation on the screen.


Kivy’s graphics API is our abstraction of OpenGL. On the lowest level, Kivy issues hardware-accelerated drawing commands using OpenGL.

Using Twisted inside Kivy -

Packaging your application for the Windows platform can only be done inside the Windows OS ...


Latest Kivy (the whole portable package, not only the github sourcecode)

PyInstaller 2.1

PyInstaller? is a program that converts (packages) Python programs into stand-alone executables, under Windows, Linux, Mac OS X, Solaris and AIX. Many packages are supported "out of the box". - Sat 16 August 2014

Packaging and Distributing a Kivy application on Linux

The Kivy library can be used to create cross-platform desktop and mobile apps that can be distributed on Linux, OS X, Windows, iOS, and Android. Packaging Kivy apps on Linux is not well-supported.

And it sounded so good ...

Setting up a development environment for development and packaging of Linux desktop applications using Kivy is not straightforward ...

But possible supposedly ...

Package hosting:

PPA stable
PPA daily
OBS stable (not maintained)
OBS testing (not maintained)
COBS (not maintained)

There's still a slight hope, but it's too bad really ...

Kivy is awesome, especially if your doing cross platform stuff, the widget set is elegant looking (although could do with more themeability) and its very clean and pythonesque. Unfortuantely its not alone in the low uptake problem.

Back about 7-8 years ago there was a thing called "Boa constructor" ...

In the book "Creating Apps in Kivy", the author describes a fairly complicated installation procedure, lots of dependencies and associated 'gotchas'. AppleOSX is particularly tricky, in part because of Apple business policies.

There's also a complete pre-packaged bootable Kivy image for the RaspberryPi.

See RaspberryPi#KivyPie


A Python interpreter interface for mobile devices. Pyonic interpreter is available for Android on Google Play, for Python 2 or Python 3. The app can also be run under Kivy on the desktop (Linux, OS X/macOS, Windows).

python-for-android is a packager for Python apps on Android. You can create your own Python distribution including the modules and dependencies you want, and bundle it in an APK along with your own code.

Features include:

Support for building with both Python 2 and Python 3.

Different app backends including Kivy, PySDL2, and a WebView? with Python webserver.

Automatic support for most pure Python modules, and built in support for many others, including popular dependencies such as numpy and sqlalchemy.

Multiple architecture targets, for APKs optimised on any given device.


ctypes problem

Works on:

LG G4 (Android 6.0), Moto E (Android 6.0)

Fails on:

Nexus 4, Galaxy Note 2, Sony xperia z1 compact, Samsung Galaxy J1 (Android 5.1.1)

Still technical issues, but these projects seem to be putting along ... will keep eye on.

Also See

Last modified 8 months ago Last modified on 04/30/2017 04:04:12 PM