enchufado
   RSS
#
Breve introducción a la programación GUI (Programación) 2010-10-27 02:25:29

Para evitar malentendidos con el título, comentar que esto no va acerca de cómo programar en un toolkit gráfico en concreto, sino de la teoría relativa a la base o fundamentos de programación de interfaces gráficas. Para entenderlo es recomendable, aunque no imprescindible, tener conocimientos de programación.

En la programación de GUI's (hablando de interfaces creadas con toolkits gráficos tales como Gtk, Qt, Swing, SWT, wxWidgets... y no de programación web) se sigue el siguiente esquema o workflow:

 WIDGET --> EVENTO --> SEÑAL --> FUNCIÓN

Se dice de estos toolkits gráficos que estan orientados a eventos, lo cual significa comunmente que la aplicación permanece dormida (en realidad, está en un bucle a la espera que se produzca actividad) hasta que sucede un evento y el control se pasa a la función apropiada. Pero pasemos a ver qué es cada elemento.

¿Qué son cada uno de estos elementos y qué relación tienen entre sí?

  • Un WIDGET (en la Wikipedia) es uno de los componentes gráficos de los que se compone una interfaz gráfica. P.ej. un botón, una entrada de texto o un menú desplegable. Incluso la ventana principal de una aplicación en la que se emplazan los demás (sub)componentes gráficos es, en sí, un widget (en este caso, sería de tipo contenedor). Efectivamente, hay distintos tipos de widgets orientados a diversas funciones: widgets contenedores, de rango, de menú, de dibujo, de texto, de representaciones en árbol... Y cada toolkit gráfico tiene los suyos, aunque la mayoría son muy comunes entre ellos.
  • Un EVENTO (event) es una acción (p.ej. un clic del mouse) realizada sobre un widget. Al hacer esto, el widget emite una señal, que podemos capturar para realizar algo (comunmente, ejecutar una función) o dejarla pasar. Los eventos suelen estar generados por el usario.
  • Una SEÑAL (signal) es aquello que avisa de que se produjo tal o cual evento en un widget. O dicho de otro modo, sabremos que se produjo un evento dado gracias emisión de una señal. Es un chivato que nos revela dónde se generó un evento, pero para ser conocedores del chivatazo (y hacer algo cuando lo sepamos), necesitamos capturarlo (o capturarla, en el caso de la señal). ¿Cómo? Pues con un manejador de señales (signal handler). Las señales pueden ser lanzadas bien por el usuario (a través de un evento), bien por la propia aplicación. Hay señales que son heredadas por ciertos objetos, así como también hay señales específicas de ciertos widgets.
  • Finalmente, la FUNCIÓN (function) sería el paso final del esquema. Es decir, es aquello que ejecutaremos (en el caso de querer ejecutar algo, siendo lo más probable en la mayoría de los casos) cuando capturemos la señal asociada a un evento de un widget. Como toda función en programación, puede o no recibir parámetros y devolver o no algún valor.

Así pues, desde el punto de vista teórico de la base de la programación de GUI's podría definirse una aplicación gráfica como un grupo de widgets con eventos definidos por el programador para responder de una determinada forma (funciones) -generalmente- a la interacción del usuario.

Si se quiere comenzar en este mundillo, ¿por dónde empezar? Habiendo entendido cómo funciona la base y con unos conocimientos básicos de programación, cualquier toolkit es válido. El camino suave sería usar un entorno con RAD (Visual Studio para lenguajes Miicrosoft, Netbeans para Java+Swing, Boa Constrictor para Python+wxWidgets, Monodevelop para C#+Gtk/Qt, Glade/Anjuta para C+Gtk...) para centrarse en la teoría acabada de presentar. Por contra, el camino duro sería usar un editor de texto y pelearse desde 0 con la API del toolkit elegido.

A modo de ejemplo personal y errante, un servidor empezó con Visual Studio .NET (con RAD), seguido de Gambas (con RAD también), seguido de Swing (con el IDE Eclipse pero sin RAD) y actualmente con PyGTK (en texto plano). Y tú, ¿con qué lenguage+toolkit empezaste/vas a empezar a hacer tus pinitos?


Comentarios (2)


Volver al indice

login, admin, form, register