Penguin

GUI ToolKits are libraries written to ease the task of writing GUI applications by abstracting the drudgework away from the programmer. As an added bonus, they offer a consistent look between applications that use the same one.

In a GUI application written without a ToolKit the actual program is a long loop that continuously calls a function to poll incoming events and then feeds them into a huge switch construct that decides how to react to each event. Every single facet of the application's behaviour has to be reflected here. Needless to say, writing non-trivial applications this way is tiresome at best.

A GUI ToolKit's main responsibility is to abstract away this event loop in a way that it can be maintained and extended easily. To this end, the different "widgets" (such as buttons, labels, menus etc) of a GUI are treated as black boxes. An EventModel is then specified, which defines how events "propagate" across these blackboxes. The EventModel is a large factor in the design of an application's architecture. Different ToolKits tend to use very different EventModels, which can cause a great deal of confusion.

Popular ToolKits include

  • GTK, the GimpToolKit, written in C but with bindings for many other languages, is the first choice for most any serious application on Linux and foundation of the GNOME DesktopEnvironment
  • Qt, written in and for C++, is the ToolKit the KDE DesktopEnvironment is built on top of
  • Tk, a rather crufty and baroque ToolKit, was originally made for TCL, but now has bindings for several other scripting languages, most notably Perl
  • AWT, the first ToolKit of the Java class library
  • Swing, a more modern ToolKit that superseedes AWT in the Java class library
  • Motif?, which is only of historical interest anymore
  • LessTif?, a Free Motif? clone, barely more interesting