In computer programming, a widget (or control) is an element of a graphical user interface (GUI) that displays an information arrangement changeable by the user, such as a window or a text box. The defining characteristic of a widget is to provide a single interaction point for the direct manipulation of a given kind of data. Widgets are basic visual building blocks which, combined in an application, hold all the data processed by the application and the available interactions on this data.
A family of common reusable widgets has evolved for holding general information based on the PARC research for the Xerox Alto User Interface. Different implementations of these generic widgets are often packaged together in widget toolkits, which programmers use to build graphical user interfaces (GUIs). Most operating systems include a set of ready-to-tailor widgets that a programmer can incorporate in an application, specifying how it is to behave. Each type of widgets generally is defined as a class by object-oriented programming (OOP). Therefore, many widgets are derived from class inheritance.
Widgets are sometimes qualified as virtual to distinguish them from their physical counterparts, e.g. buttons that can be clicked with a mouse cursor, vs. physical buttons that can be pressed with a finger.
A related (but different) concept is the desktop widget, a small specialized GUI application that provides some visual information and/or easy access to frequently used functions such as clocks, calendars, news aggregators, calculators and desktop notes. These kinds of widgets are hosted by a widget engine.
“Widget” is short for “window gadget”. The term was first applied to user interface elements during Project Athena in 1988. The word was chosen because "all other common terms were overloaded with inappropriate connotations" and – since the project's Intrinsics toolkit associated each widget with a window of the underlying X Window System – because of the common prefix with the word window.
List of common generic widgets
- Selection and display of collections
- Balloon help
- Status bar
- Progress bar
- Modal window
- Dialog box
- Palette window, also known as "Utility window"
- Inspector window
- Widget toolkit for the implementations of widget programming interfaces
- Widget engine for mostly unrelated, physically inspired "widgets"
- Elements of graphical user interfaces
- Ralph R. Swick, Mark S. Ackerman (1988). "The X Toolkit: More Bricks for Building User-Interfaces, or, Widgets for Hire". USENIX Winter. pp. 221–228.