Kit de herramientas de widgets
# Kit de herramientas de widgets

Un kit de herramientas de widgets (widget toolkit, por su nombre en inglés), biblioteca de widgets, kit de herramientas GUI o una biblioteca UX es una biblioteca o una colección de bibliotecas que contienen un conjunto de elementos de control gráfico (llamados widgets) que se utilizan para construir la interfaz gráfica de usuario (GUI) de los programas.

La mayoría de los kits de herramientas de widgets incluyen además su propio motor de renderizado. Este motor puede ser específico para un determinado sistema operativo o sistema de ventanas o contener back-ends para interactuar con múltiples ventanas y también con API de renderizado como OpenGL, OpenVG o EGL. El aspecto y la sensación de los elementos de control gráfico se pueden codificar o desacoplar, lo que permite que los elementos de control gráfico tengan un tema o apariencia.

## Descripción general

Algunos kits de herramientas se pueden utilizar desde otros lenguajes de programación empleando enlaces de lenguaje (language binding, por su nombre en inglés). Los constructores de interfaz gráfica de usuario como, por ejemplo Glade Interface Designer facilitan la creación de interfases de usuario tipo WYSIWYG empleando un lenguaje de marcado de interfaz de usuario como en el caso de GtkBuilder.

La interfaz de usuario de un programa se construye comúnmente en cascada, con elementos de control gráfico que se agregan directamente uno encima del otro.

La mayoría de los kits de herramientas de widgets utilizan la programación basada en eventos como modelo para la interacción. El kit de herramientas maneja los eventos del usuario, por ejemplo, cuando el usuario hace clic en un botón. Cuando se detecta un evento, se pasa a la aplicación donde se trata. El diseño de esos conjuntos de herramientas ha sido criticado por promover un modelo demasiado simplificado de evento-acción, lo que lleva a los programadores a crear código de aplicación propenso a errores, difícil de extender y excesivamente complejo. Se han propuesto máquinas de estados finitos y máquinas de estados jerárquicos como modelos de alto nivel para representar los cambios de estado interactivos para programas reactivos.

## Sistemas de ventanas

Una ventana se considera un elemento de control gráfico. En algunos sistemas de ventanas, las ventanas se agregan directamente al gráfico de escena (lienzo o canvas) mediante el administrador de ventanas, y se pueden apilar y colocar en capas una encima de la otra a través de varios medios. Cada ventana está asociada con una aplicación particular que controla los widgets agregados a su lienzo, que pueden ser vistos y modificados por sus aplicaciones asociadas.

