Graphical User Interfaces

My experience

I (/who/astynax) have spent a lot of time building various user interfaces:

  • /TUIs for the MS-DOS programs written in QBasic and Turbo Pascal
  • Graphical interfaces for Windows programs written in Borland Delphi
  • Tcl/Tk-based GUIs and “Web GUIs” for Linux programs

Here I have written my experience in doing such stuff.


I didn’t use the Tcl itself but I played a lot with its GUI toolkit, the Tk. Usually it were the Tkinter for /Python or uni-htk for /Haskell. Tk is pretty simple to use, lightweight, and “just works” on many platforms. And it also can look good!

Here is a nice but opinionated article about Tkinter: “How to setup correctly an application with Python and Tkinter”

Also, if you are a Pythonista take a look at PySimpleGUI. It is a wrapper that helps to create Tk, Qt, and even the Web GUIs using a set of universal primitives. Code looks so script’ish for me. But it is quite Ok when you want to make a prototype ASAP.

Web GUIs

Nowadays I prefer to use /Elm. Though I always have in my pocket the Threepenny-GUI (a /Haskell library) if I will need to do some heavy lifting :)

Usually, WebGUI implies /CSS and under the link I keep a couple of good variants of it to use in my projects.

When I don’t need a full-featured GUI and some simple menu-like interface is enough I use the /Rofi with some Python scripting.

Sometimes I just need to show a simple confirmation window or a text entry. In such cases /Zenity can be just good.



Recently I found a nice set of tasks that are testing how your favorite GUI toolkit capable to do the real work. Here it is: “7GUIs: A GUI Programming Benchmark”. My advice: just scroll through the list of tasks and look to the last ones! :)

Interesting stuff to play with

  • zserge/lorca, “Build cross-platform modern desktop apps in Go + HTML5” (/Golang)
  • BeeWare, “Write your apps in /Python and release them on <…many platforms> using rich, native user interfaces.”
  • Nuklear, “A single-header ANSI C immediate mode cross-platform GUI library” with bindings for /Rust
  • libui, “Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.”