sábado, 13 de agosto de 2011

Interfaz gráfica usando GTK

¿Y como hago la interfaz gráfica?, es tal vez es unas de las primeras preguntas que nos hacemos al migrar a linux, desde windows creábamos ventanas de diferentes maneras, ya sea con wxDevC++, Borland C++ Builder, usando APIs de Windows, etc... En GNU/Linux encontramos también diferentes formas de crear una aplicación con interfaz gráfica de usuario, en esta ocasión mostrare como hacerlo con la biblioteca GTK ("GIMP Tool Kit"), con esta biblioteca se desarrollan en su mayoría aplicaciones para los entornos gráficos GNOME, XFCE y ROX aunque también se puede usar en el escritorio de Windows, MacOS y otros.

Lo primero que debemos hacer es instalar la librería GTK, tecleamos en la terminal como superusario:

En Debian y derivados:
# apt-get install libgtk2.0-dev


En Fedora:
# yum -y install libgtk2.0-dev


Instalado esto, podemos empezar nuestra primera aplicación GTK, les muestro este sencillo ejemplo:
#include "gtk/gtk.h"

void hello( GtkWidget *widget, gpointer data);
int contador_click = 0;

int main(int argc, char *argv[])
{ 
      //Creamos los widget a utilizar, una ventana principal y un boton
      GtkWidget* ventana;
      GtkWidget* boton;
   
      gtk_init(&argc, &argv);//llamada a todas las aplicaciones GTK
   
      //Creamos una nueva ventana y un boton con una etiqueta
      ventana=gtk_window_new(GTK_WINDOW_TOPLEVEL);
      boton = gtk_button_new_with_label ("Imprimir");
   
      //Asignamos el alto de la ventana
      gtk_container_set_border_width (GTK_CONTAINER (ventana), 50);

      /* definimos los eventos. Para la ventana, hacemos que cierre 
       * correctamente al presional el boton de salida "x". Para el boton 
       * hacemos una llamada a la funcion "hola" cuando se le de click*/     
     
      g_signal_connect (boton, "clicked",G_CALLBACK (hello), NULL);
      g_signal_connect(ventana, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
   
      //agregamos el boton a la ventana
      gtk_container_add (GTK_CONTAINER (ventana), boton);
   
      //mostramos los widget
      gtk_widget_show (boton);
      gtk_widget_show(ventana);
   
      gtk_main(); //Controla la salida y espera por un evento a ocurrir
   
      return 0;
}

/* Esta funcion imprime un mensaje en la terminal cada vez que el usuario
 * hace click en el boton */
void hello( GtkWidget *widget, gpointer data)
{
     contador_click++;
     g_print ("Hola Mundo Cruel %d \n", contador_click);
}


Y este es el resultado:



Al compilar manualmente en la terminal deben agregar la librería gtk de la siguiente manera:
g++ interfazGTK.cpp -o pinguinazos `pkg-config --libs gtk+-2.0` `pkg-config --cflags gtk+-2.0`

O puede usar una IDE y adjuntar esos parámetros al proyecto.( ej: Geany, Anjunta).

1 comentario: