7 Tools for GUI Development on Raspberry Pi
By: Sasha Shturma
Tags: Software Development, Embedded Systems, Raspberry Pi, Embedded Gui, Electronics

Many of us are used to sleek and responsive iPhone or Android user interfaces. But when it comes to development of modern UIs on Raspberry Pi or other embedded platforms, it turns out not to be an easy task. There are tools that have been around for 30 years and are easy to use, but UIs developed with them look very outdated. There are newly developed frameworks, which can help develop modern GUIs, but have a steep learning curve. The choice really depends on what you want to achieve and how much time you’re willing to spend learning.

Here’s a brief overview of the most common frameworks that have been either designed or ported for Raspberry Pi and their pros and cons.

guizero library. A Python library geared toward beginners that aims to make the process of GUI creation easy, based on tkinter.

Experience level: beginner, knowledge of command line tools and basic programming concepts are required.

Language: Python

Pros: Tutorials with detailed steps for beginners. It could also be used in parallel to learning Python.

Cons: A limited number of widgets that look outdated. If your goal is to create a UI from the 90s, that’s your tool.

Overall, a good starting point if you like Python and just starting to learn development for Raspberry Pi.

Kyvi Python. Python framework for cross-platform app development.

Experience level: intermediate/advanced

Language: Python, kvlang

Pros: Straightforward documentation with examples, community support, cross-platform, focus on multi-touch apps.

Cons: There’s a learning curve — you need to get familiar with kvlang for layout design. Full customization of widgets requires in-depth knowledge of the platform. Also, installation of all the dependencies could be a challenge for beginners.

If you’re familiar with layouts and event-based program flow from Android development or GTK, there might be less of a learning curve as there is some resemblance. Underlying architecture is however different.

Electron. Framework for cross-platform development of desktop apps with JavaScript.

Experience level: intermediate/advanced

Pros: Interface creation with web tools is much easier and more flexible than using widget libraries. You can use any existing framework like Bootstrap for a modern-looking UI.

Cons: Electron applications can be resource hungry and slow if Node.js dependencies are not properly managed.

Electron is a great tool for creation of cross-platform desktop apps, but it hasn’t been designed specifically for embedded systems. Deciding whether it’s an appropriate framework to use on Raspberry Pi depends on the use case.

GTK. GUI widget toolkit.

Experience level: intermediate/advanced

Pros: A lot of users, great documentation, multiple language bindings: Python, C++, JavaScript, Rust.

Cons: While the look and feel of widgets has been evolving with time, it still doesn’t look very modern. There’s a learning curve to start using GTK, cross-platform support is not extensive.

TK. Cross-platform GUI widget toolkit.

Experience level: intermediate/advanced

Pros: The tool has been around for almost 30 years. In these years, it gained widespread and impressive community support. A lot of language bindings, the most popular is Python tkinter. TK is arguably the fastest way to create embedded UI.

Cons: Interfaces developed with TK look very outdated.

Qt. Robust toolkit for creating cross-platform applications, includes a number of GUI widgets.

Experience level: advanced

Pros: Decent documentation, many examples, and tutorials form users, cross-platform.

Cons: Complex, multi-step compilation process, native widgets don’t look crisp, steep learning curve, and a lot of documentation to read before getting started, can get quite expensive for commercial use.

Qt has been around for years and probably the most popular platform for professional embedded GUI development. It offers much more than GUI tools, but the steep learning curve might not be justified if you’re developing rather simple apps.

Pyxis SDK. Set of tools for developing embedded web applications. Based on Raspbian OS and Chromium.

Experience level: beginner/intermediate

Pros: The ability to use any existing web frameworks, for example, React to create embedded GUIs. Includes JavaScript APIs to access system interfaces and controls, like screen brightness and WiFi. Designed to run applications in full-screen mode on boot time.

Cons: As of now, Pyxis SDK supports only Raspberry Pi. Web runtime requires a lot of resources, so it can be less efficient than apps developed with C++.