LiNpOx

Linux y Windows para informáticos

Programar con GTK (Lenguaje C) – Parte III

Posted by oftc007 en 17 marzo 2008

Las Señales (Signals)

En esta tercera parte del manual, vamos aprender como asignarle señales a los widgets para que puedan realizar alguna accion, por ejemplo, una señal que nos permita hacer algo cuando hagamos click sobre un boton.

Nada mas facil que un ejemplo para entender, asi que manos a la obra. Primero creamos una ventana y le definimos el tamaño de nuestro gusto. En el ejemplo anterior de la segunda parte del tutorial no notaron que el label que agregamos se pego en la ventana completa?, para evitar esto si necesitamos mas de un widget en nuestra ventana (como sera en todos los casos). Una solución para esto es crear primero las divisiones y despues ir pegando cada widget en cada división sin poder moverlos, pero esa manera es muy tediosa y poco practica. Para solucionar este “problema” de manera mas sencilla siempre despues de crear una ventana le pegamos el widget “Fixed position” que nos permite agregar y mover widgets con plena libertad por toda nuestra ventana.

El widget “Fixed position” es el que tiene un icono de un cuadro con tres cuadros mas pequeños.

 

Fixed position

 

Luego de agregar el “Fixed position” a nuestra ventana agregamos un label, una entrada de texto (entry) y un boton (button).

 

Paleta tuto2

 

 

Los acomodamos a nuestro gusto en la ventana y luego hacemos click sobre el boton y vamos a la ventana de propiedades de glade.

Una vez en la ventana de propiedades, si queremos cambiar el texto que tiene el boton, editamos la propiedad llamada “label” con el texto que queramos en el boton. Luego de eso vamos a la pestaña “Signals”, aqui son tres los campos que nos importa y que vamos a explicar a continucaión:

  • Signal: En este campo seleccionaramos la señal que queremos, es decir el evento que queramos que ejecute una cierta acción. Al hacer click sobre los tres puntos aparece un cuadro donde podemos seleccionar entre todas la señales disponibles. Para efectos de nuestro ejemplo seleccionaremos la señal “clicked”.
  • Handler: Al seleccionar una señal nos fijamos que tambien se rellena el campo “Handler” con “on_button1_clicked“, esto no es mas que el nombre que le queremos dar a la funcion donde vamos a programar la accion para el boton. Para efecto de nuestro ejemplo la podemos cambiar por algo “activar_boton”, o por lo que queramos.
  • After: Este campo nos indica cuando queremos ejecutar la funcion asociada a la señal, si despues o antes que el evento de la señla ocurra.

Ya que tenemos definida nuestra señal hacemos click sobre el boton “add” para agregarla al widget, en nuestro caso al boton.

Una vez agregada la señal, guardamos nuestro poryecto y generamos el codigo (build), luego de esto vamos a la carpeta “src” que esta dentro de la carpeta de nuestro proyecto. Una vez en la carpeta “src” ubicamos un archivo llamado “callbacks.c” y lo abrimos con nuestro IDE favorito o con cualquier editor de texto.

Al abrir el “callbacks.c” deberiamos tener algo asi:

callbacks.c

Esa es la estuctura basica de este archivo, donde econtramos una serie de includes con los archivos necesarios, y despues de eso encontramos las funciones de la señales que asignamos a nuestros widgets. En nuestro caso tenemos la función “activar_boton”, y dentro de ella programaremos lo que deseamos hacer cuando hagamos click sobre el boton.

Para efecto de nuestro ejemplo lo que deseamos hacer es escribir algo en nuestra entrada de texto y que al momento de hacer click en el boton se copie el texto de la entrada de texto a label. Para hacer eso necesitamos el siguiente codigo:

callbacks1.c

Ok ahora vamos a explicar el codigo, lo primero que tenemos que hacer es declarar un apuntador del tipo “GtkWidget” e incializarlo con “lookup_widget” para que apunte a algun widget dentro de la ventana y poder usarlo en nuestro codigo. Los parametros del “lookup_widget” son:

  • Un widget cualquiera, aqui siempre pondremos el widget que se recibe por parametro en la función, en nuestro caso “button”.
  • El nombre que tiene el widget en la ventana hecha en glade, este nombre siempre debe ir entre comillas. El nombre del widget se puede ver y editar en la ventana de propiedades de glade.

Luego de que tenemos el apuntador de la entrada de texto y el label declarados e inicializados es momento de usarlos. El comando para extraer el texto de un label es:

gtk_entry_get_text (GtkEntry *entry)

Es importante saber que como los widget estan declarados del tipo GtkWidget y el parametro del comando recibe es un GtkEntry, es necesario hacer un cast, por eso eviamos la entrada de la forma (GTK_ENTRY(entrada)) para hacer el cast. Ese comando retorna un tipo de char*, por eso se lo asignamos a la variable “texto” que declaramos arriba.
Luego de eso, para asignarle el texto de esa variabla al label usamos el comando:

gtk_label_set_text (GtkLabel *label, char* txt)

Como se puede observar en el codigo de nuestro callbacks.c le enviamos el label donde queremos el texto con el cast necesario y la variable con el texto que queremos colocar, que en nuestro caso es la que acabamos de leer desde la entrada de texto.

Por ultimo guardamos nuestro callbacks.c y construimos como aprendimos en la segunda parte del manual. Si tenemos algun error en el codigo, el mismo nos aparecera en la consola al momento de hacer el make. Luego de esto ejecutamos el programa y el resultado sera:

corrida tuto2

Otra cosa importante, es que los comando de gtk aunque parecen complejos y dificiles de aprender, no lo son. Una manera sencilla de que nunca se nos olviden, aparte de programar con frecuencia en gtk, es conocer la estructura de los comandos. Primero siempre comienzan con gtk seguido de un piso (_), luego tenemos que colocar el tipo de widget que queremos trabajar y por ultimo lo que deseamos hacer. Por ejemplo, si queremos extraer el texto de un label seria.

gtk_ (esto es fijo), seguido de _label (widget que queremos usar) y por ultimo _get_text (lo que queremos hacer), quedando el comando:

gkt_label_get_text (parametros)

Para conocer todos los comandos disponibles de gtk, la manera que recomiendo es instalar el “DevHelp” e instalar la documentación del lenguaje, para instalar la documentacion de gtk o de cualquier otro lenguaje, instalamos el paquete que termina con “-doc“. En nuestro caso tenemos la documentacion de gtk en nuestro PC cuando instalamos el paquete “libgkt2.0-doc“.

Anuncios

3 comentarios to “Programar con GTK (Lenguaje C) – Parte III”

  1. R.A!!! said

    Me esta convenciendo este señor tutorial!!!

  2. sermod said

    Muy bueno

  3. Johan said

    como se hace cuando no salen el calback.c? yo estoy usando glade 3.0

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: