|
|
Este documento está disponible en los siguientes idiomas: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Russian Turkce Polish |
por Özcan Güngör <ozcangungor%28at%29netscape.net> Sobre el autor: Utilizo Linux desde 1997. Libertad, flexibilidad y opensource. Son las características que me gustan. Taducido al español por: Luis F. Díaz <luisfdd(at)yahoo.es> Contenidos: |
Programar GUI con GTKResumen:
En esta serie de artículos aprenderemos cómo escribir programas con interfaz de usuario gráfica (GUI) utilizando GTK. No tengo ni idea de cuando concluirán. Para entenderlos deberías saber manejar los siguientes conceptos del lenguaje de programación C:
|
GTK (GIMP Toolkit) es una biblioteca que posibilita la creación de interfaces de usuario gráficas (Graphical User Interfaces, GUI). Está disponible bajo licencia GPL. Utilizando dicha biblioteca pueden crearse programas de código abierto, tanto libres como comerciales.
La biblioteca se denomina GIMP toolkit (GTK) por haber sido creada para desarrollar el GIMP (General Image Manipulation Program). Sus autores son:
GTK es un interfaz de aplicaciones de usuario orientado a objetos. Aunque escrita en C, utiliza clases y llamada a funciones.
Para compilar programas GTK se necesita decirle a gcc qué bibliotecas GTK necesita y dónde están. La orden gtk-config lo sabe:
# gtk-config --cflags --libsLa salida debería ser, dependiendo del sistema, algo así como:
-I/opt/gnome/include/gtk-1.2 -I/opt/gnome/include/glib-1.2 -I/opt/gnome/lib/glib /include -I/usr/X11R6/include -L/opt/gnome/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -l Xext -lX11 -lmEl significado de los parámetros anteriores es el siguiente:
-l library: Busca una biblioteca según el formato liblibrary.a en la ruta especificada.Para compilar un programa GTK llamado hello.c se puede utilizar la siguiente orden:
gcc -o hello hello.c `gtk-config --cflags --libs`
La entrada que aparece detrás del parámetro -o es el nombre del programa compilado.
Se supone que tu sistema tiene instalado GTK. Las últimas versiones pueden encontrarse en ftp.gtk.org.
Vamos a escribir nuestro primer programa. Dicho código crea una ventana vacía de 200x200 pixels de tamaño:
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
return(0);
}
GtkWidget es un tipo de variable para definir varios componentes como window (ventana), button (botón), label (etiqueta)... En este ejemplo, una ventana se define así:
GtkWidget *window;void gtk_init(int *argc,char ***argv) inicia el GTK y obtiene sus parámetros introducidos en la línea de comandos. Dicha función debe usarse después de definir componentes.
GtkWidget *gtk_window_new(GtkWindowType windowtype) crea una ventana nueva. Una ventana puede ser de cualquiera de los siguientes tipos:
void gtk_widget_show(GtkWidget *widget) se utiliza para hacer aparecer un componente en una ventana. Esta función se usa después de haber definido el componente y cambiado sus atributos.
void gtk_main(void) prepara la ventana y sus componentes para aparecer en pantalla. Dicha función debe usarse al final de un programa GTK.
Veamos ahora algunas propiedades de la ventana, como el título, el tamaño, la posición...
void gtk_window_set_title(GtkWindow *window,const
gchar *title)
se utiliza para poner o cambiar el título de un componente window. El primer parámetro en dicha función es de tipo GtkWindow, pero la variable window es de tipo GtkWidget. Seremos advertidos durante la compilación y, aunque el programa compilado funcione, es mejor corregirlo. Para eso se utiliza GTK_WINDOW(GtkWidget *widget). El segundo parámetro, title , es de tipo gchar. gchar está definido de la misma forma que un tipo char en la biblioteca glib.
void gtk_window_set_default_size(GtkWindow *window, gint width, gint height)
dispone el tamaño de la ventana. Como gchar, gint está definido de la misma forma que int en la biblioteca glib. La funciónvoid gtk_window_set_position(GtkWindow *window, GtkWindowPosition position)
fija la posición de la ventana. position puede ser:He aquí un ejemplo:
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"Ýlk Program");
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window),300,300);
gtk_widget_show (window);
gtk_main ();
return(0);
}
En GUIs se necesita usar ratón y teclado, es decir, se puede apretar en un botón. Por eso se usa la función GTK siguiente:
guint gtk_signal_connect_object(GtkObject *object,const gchar *name,GtkSignalFu nc func,GtkObject *slot_object);
object es el componente que emite las señales. Por ejemplo, si quieres saber si un botón ha sido pulsado, object será button. name es el nombre del evento, que puede ser cualquiera de los siguientes:
func es la función que debe ser llamada cuando ocurra un envento. He aquí un ejemplo:
#include <gtk/gtk.h>La función
void close( GtkWidget *widget,gpointer *data)
{
gtk_main_quit();
}
int main( int argc,char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (close), NULL);
gtk_widget_show (window);
gtk_main ();
return(0);
}
gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (close), NULL)
escucha el evento de destrucción de la ventana. Cuando la ventana es obligada a cerrarse, se llama a la función close. La función close llama a gtk_main_quit() y el programa finaliza.Los detalles sobre señales y eventos serán explicados más adelante...
Los botones usuales normalmente hacen algo cuando son pulsados. En la biblioteca GTK hay dos formas de crear un botón:
La primera función crea un botón sin etiqueta (no lleva nada escrito). La segunda, crea un botón con etiqueta (label es la etiqueta escrita sobre el botón).
Ahora vamos a utilizar una función nueva:
void gtk_container_add(GtkContainer *container,GtkWidget *widget)
Mediante dicha función es posible hacer que un botón (u otro componente) aparezca en una ventana (o en cualquier otro contenedor). En el siguiente ejemplo, el contenedor es una ventana y el componente que se añade un botón. Aprenderemos sobre otro tipo de contenedores más adelante.
Lo más importante de un botón es saber si se pulsa o no. De nuevo se utiliza la función gtk_signal_connect para saberlo. Mediante ella se llama a otra, que es la que realmente se "esconde" en el botón. He aquí un ejemplo:
#include <gtk/gtk.h>
void close( GtkWidget *widget,gpointer *data)
{
gtk_main_quit();
}
void clicked(GtkWidget *widget,gpointer *data)
{
g_print("Button Clicked\n");
}
int main( int argc,char *argv[] )
{
GtkWidget *window,*button;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (close), NULL);
button=gtk_button_new_with_label("Button");
gtk_container_add(GTK_CONTAINER(window),button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(clicked),NULL);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main ();
return(0);
}
|
Contactar con el equipo de LinuFocus
© Özcan Güngör, FDL LinuxFocus.org |
Información sobre la traducción:
|
2003-05-13, generated by lfparser version 2.34