Widgets include icons, pull-down menus, buttons, selection boxes, progress indicators, on-off checkmarks, scroll bars, windows, window edges (that let you resize the window), toggle buttons, form, and many other devices for displaying information and for inviting, accepting, and responding to user actions.
In programming, widget also means the small program that is written in order to describe what a particular widget looks like, how it behaves and how it responds to user actions. 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. New widgets can be created.
In computing, the term was apparently applied first in UNIX -based operating systems and the X Window System. In object-oriented programming (OOP), each type of widget is defined as a class (or a subclass under a broad generic widget class) and is always associated with a particular window. In the AIX Enhanced X-Window Toolkit, a widget is the fundamental data type.
Most if not all application development languages today, such as Java and Tool Command Language, come with a ready-made library of widgets that a programmer can incorporate and modify. Using Microsoft's Visual Basic, a widget can be implemented as or part of an ActiveX control.
The term widget has traditionally been used to refer to any discrete object -- usually of some mechanical nature and relatively small size -- when it doesn't have a name, when you can't remember the name, or when you're talking about a class of certain unknown objects in general. According to Eric Raymond, compiler of The New Hacker’s Dictionary, "legend has it that the original widgets were holders for buggy whips," but this was possibly written tongue-in-cheek.