# Widget toolkit

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Widget_toolkit
> Markdown URL: https://mediated.wiki/source/Widget_toolkit.md
> Source: https://en.wikipedia.org/wiki/Widget_toolkit
> Source revision: 1340541683
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

Framework or toolkit a program uses to display the graphical user interface

For other uses, see [Widget](/source/Widget).

A **widget toolkit**, **widget library**, **GUI toolkit**, **GUI framework**, **UI framework**, or **UX library** is a [library](/source/Library_(computing)) or a collection of libraries containing a set of [graphical control elements](/source/Graphical_control_element) (called *widgets*) used to construct the [graphical user interface](/source/Graphical_user_interface) (GUI) of programs.

Most widget toolkits additionally include their own [rendering engine](/source/Rendering_(computer_graphics)). This engine can be specific to a certain [operating system](/source/Operating_system) or [windowing system](/source/Windowing_system) or contain back-ends to interface with multiple ones and also with rendering APIs such as [OpenGL](/source/OpenGL), [OpenVG](/source/OpenVG), or [EGL](/source/EGL_(API)). The [look and feel](/source/Look_and_feel) of the graphical control elements can be hard-coded or decoupled, allowing the graphical control elements to be [themed](/source/Theme_(computing))/[skinned](/source/Skin_(computing)).

## Overview

A window using the [Standard Widget Toolkit](/source/Standard_Widget_Toolkit)

Some toolkits may be used from other languages by employing [language bindings](/source/Language_binding). [Graphical user interface builders](/source/Graphical_user_interface_builder) such as e.g. [Glade Interface Designer](/source/Glade_Interface_Designer) facilitate the authoring of GUIs in a [WYSIWYG](/source/WYSIWYG) manner employing a [user interface markup language](/source/User_interface_markup_language) such as in this case [GtkBuilder](/source/GtkBuilder).

The GUI of a program is commonly constructed in a cascading manner, with graphical control elements being added directly to on top of one another.

Most widget toolkits use [event-driven programming](/source/Event-driven_programming) as a model for interaction.[1] The toolkit handles [user events](/source/Event_handler), for example when the user clicks on a [button](/source/Button_(computing)). 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 oversimplified model of event-action, leading programmers to create error-prone, difficult to extend and excessively complex [application code](/source/Application_code).[2] [Finite-state machines](/source/Finite-state_machine) and [hierarchical state machines](/source/UML_state_machine) have been proposed as high-level models to represent the interactive state changes for reactive programs.

## Windowing systems

A [window](/source/Window_(computing)) is considered to be a graphical control element. In some windowing systems, windows are added directly to the [scene graph (canvas)](/source/Canvas_(GUI)) by the [window manager](/source/Window_manager), and can be stacked and 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.

## See also

- [WIMP (computing)](/source/WIMP_(computing))

- [Layout manager](/source/Layout_manager)

- [List of widget toolkits](/source/List_of_widget_toolkits)

## References

1. **[^](#cite_ref-1)** [Past, Present and Future of User Interface Software Tools](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.45.9491). Brad Myers, Scott E. Hudson, Randy Pausch, Y Pausch. ACM Transactions on Computer-Human Interaction, 2000. [\[1\]](https://www.cs.cmu.edu/~amulet/papers/futureofhciACM.pdf)

1. **[^](#cite_ref-Samek03b_2-0)** Samek, Miro (April 2003). ["Who Moved My State?"](http://www.ddj.com/cpp/184401643). C/C++ Users Journal, The Embedded Angle column.

v t e List of widget toolkits Low-level platform-specific On AmigaOS Intuition On Classic Mac OS, macOS Macintosh Toolbox Carbon On Windows Windows API UWP WinRT On Unix Xlib XCB Wayland On BeOS, Haiku BeOS API On Android CLI Xamarin.Android Low Level Cross-platform CLI OpenTK C GDK Simple DirectMedia Layer Java JOGL LWJGL High-level, platform-specific On AmigaOS BOOPSI MUI ReAction GUI Zune On Classic Mac OS, macOS Object Pascal MacApp Objective-C, Swift Cocoa Cocoa Touch C++ MacApp PowerPlant THINK C CLI Xamarin.Mac Xamarin.iOS On Windows CLI Windows Forms XAML Windows Presentation Foundation Windows UI Library Silverlight Microsoft XNA C++ MFC Active Template Library Windows Template Library Object Windows Library Object Pascal Visual Component Library On Unix and X11 Athena (Xaw) LessTif Motif OLIT XForms XView High-level, cross-platform C Enlightenment Foundation Libraries GTK IUP XForms XVT C++ Bedrock CEGUI Component Library for Cross Platform FLTK FOX toolkit OpenGL User Interface Library gtkmm JUCE Qt Rogue Wave Views TnFOX U++ Wt wxWidgets Simple and Fast Multimedia Library Objective-C GNUstep CLI Gtk# Tao Framework OpenTK UIML MonoGame Moonlight Xamarin.Forms .NET MAUI Adobe Flash Apache Flex Go Fyne Haskell wxHaskell Java Abstract Window Toolkit FXML JavaFX Qt Jambi Swing Standard Widget Toolkit Google Web Toolkit Lightweight User Interface Toolkit JavaScript Dojo Echo Ext JS Closure jQuery UI OpenUI5 Qooxdoo React Native YUI Common Lisp CAPI CLIM Common Graphics Lua IUP Pascal Lazarus Component Library Object Pascal Component Library for Cross Platform fpGUI IP Pascal FireMonkey Perl Perl/Tk wxPerl PHP PHP-GTK wxPHP Python Tkinter Kivy PySide PyQt PyGTK wxPython Ruby Shoes QtRuby Tcl Tcl/Tk XML GladeXML Lively Kernel Extensible Application Markup Language XUL Wt shell Newt CDK Dialog Dart Flutter

v t e Graphical control elements Command input Adjustment handle Button Context menu Drop-down list Hamburger button Menu Pie menu Data input-output Checkbox Color picker Combo box Cycle button Date picker Grid view Toggle switch List box List builder Radio button Scrollbar Search box Slider Spinner Text box Informational Balloon help Head-up display in computing HUD in video games Icon Infobar Label Loading screen Progress indicator Progress bar Splash screen Throbber Sidebar Status bar Toast Tooltip Containers Accordion Tree view Client-side decoration Disclosure widget Frame / Fieldset Menu bar Panel Popover Ribbon Tab Toolbar Window Window decoration Workspace Navigational Address bar Bookmarks bar Breadcrumb navigation Hyperlink Navigation bar Virtual desktop Special windows Alert dialog box Dialog box File dialog Inspector window Modal window Palette window Related concepts File viewer List of graphical user interface elements Layout manager Look and feel Mouseover Scrolling Widget toolkit WIMP Zoomable user interface

v t e Desktop environments and window managers based on X or Wayland Desktop environments (comparison) GTK-based Budgie Cinnamon GNOME 1 2 3 GPE Java Desktop System LXDE MATE ROX Desktop Sugar Xfce Qt-based Deepin DE KDE SC 1 2 3 4 Lumina LXQt Razor-qt Trinity UKUI Motif-based CDE IRIX Interactive Desktop VUE X.desktop Other COSMIC Looking Glass OpenWindows (XView- and OLIT-based) UDE (Xlib/XCB-based) Graphical shells GNOME Shell KDesktop KDE Plasma 4 5 6 Plasma Bigscreen Plasma Mobile Lomiri Maynard Phosh Unity X window managers (comparison) Compositing Compiz Enlightenment KWin Metacity Metisse Moksha Muffin Mutter Project Looking Glass Xfwm Stacking 4Dwm AfterStep amiwm Blackbox CTWM cwm Fluxbox FLWM FVWM IceWM Matchbox Motif Window Manager olwm Openbox Qvwm Sawfish swm twm tvtwm vtwm Window Maker WindowLab wm2 Tiling awesome dwm i3 Ion larswm ratpoison StumpWM wmii xmonad Wayland compositors Enlightenment Gala KWin Mir Mutter Muffin Budgie-wm sway Weston Hyprland Related Display server Desktop metaphor GUI GUI widget Painter's algorithm Resolution independence Shell Virtual desktop Widget toolkit WIMP Windowing system

---
Adapted from the Wikipedia article [Widget toolkit](https://en.wikipedia.org/wiki/Widget_toolkit) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Widget_toolkit?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
