A widget toolkit, widget library, or GUI toolkit is a set of widgets for use in designing applications with graphical user interfaces (GUIs). The toolkit itself is a piece of software that is generally provided with an operating system, windowing system, or window manager which provides programs with an application programming interface (API), allowing them to make use of widgets. Each widget facilitates a specific user-computer interaction, and appears as a visible part of the computer’s GUI.
Widgets that are provided by a toolkit typically adhere to a unified design specification, including aesthetics, to lend a sense of overall cohesion among various parts of the application and between various applications within the GUI.
Widget toolkits also contain software to assist in the creation of window managers, as windows themselves are considered widgets. Some widgets support interaction with the user, for example labels, buttons, and check boxes. Others act as containers that group the widgets added to them, for example windows, panels, and tabs.
The graphical user interface of a program is commonly constructed in a cascading manner, with widgets being added directly to on top of existing widgets. In many implementations application windows are added directly to the desktop by the window manager, and can be stacked layered on top of each other through various means. Each window is associated with a particular application which controls the widgets added to its canvas, which can be watched and modified by their associated applications.
Most commercial widget toolkits use event-driven programming as a model for interaction. The toolkit handles user events, for example when the user clicks on a button. When an event is detected, it is passed on to the application where it is dealt with. The design of those toolkits has been criticized for promoting an over-simplified model of event-action, leading programmers to create error-prone, difficult to extend and excessively complex application code. Finite State Machines and Hierarchical State Machines have been proposed as high-level models to represent the interactive state changes for reactive programs.
The look and feel of the widgets can be hard-coded in the toolkit, but some widget toolkit APIs decouple the look and feel from the definition of the widgets, allowing the widgets to be themed. (see pluggable look and feel).
Main article: List of widget toolkits
* wxWidgets — Free, extensible, cross-platform UI toolkit with a dockable user interface extension
* Juce — An extensive cross-platform UI toolkit
* FLTK — A light, cross platform, non-native widget toolkit
* FOX toolkit — A fast, open source, cross-platform widget toolkit
* FrugalWidgets – A minimalistic widget set for Win32
* GTK+ — The GIMP toolkit, a widget toolkit used by GNOME applications
* IUP_(software) — IUP cross platform static/dynamic library C/Lua, Lua (MIT) licence
* JX Application Framework
* Microsoft Foundation Classes – The most commonly used widgeting toolkit for Windows.
* Object Windows Library & OWLNext
* Qt — Cross-platform UI toolkit, LGPL or commercial licence, used for example in KDE, Google Earth, Skype
* Standard Widget Toolkit — SWT for Java
* Swing — Java widget toolkit
* Tk — Toolkit part of the Tcl – project and often used by Perl and Python programmers
* Visual Component Library