LiNpOx

Linux y Windows para informáticos

Programar con GTK (Lenguaje C) – Parte IV

Posted by oftc007 en 20 marzo 2008

USO BÁSICO DE OTROS WIDGETS

1-.Combo Box.

Este widget nos permite rellenarlo y seleccionar un elemento de la lista de elementos. Existen dos tipos de Combo Box, uno que solo permite seleccionar el elemento y otro que tambien nos permite escribir en caso que queramos un elemento diferente al que se encuentra en el Combo Box.

A continuación vamos a aprender como rellenar y tomar la selección de un Combo Box. Primero necesitamos armar nuestra ventana en glade que va estar conformada por un Combo Box y un label donde vamos a mostrar el elemento seleccionado.

combo paleta

Una vez que tenemos nuestra ventana diseñada, seleccionamos el Combo Box para agregarle una señal. La signal que vamos a usar en «changed», la seleccionamos y colocamos el nombre que queramos al manejador (Handler). Luego que ya tenemos agregada nuestra señal al Combo Box, guardamos, generamos el codigo de nuestra ventana y abrimos nuestro callbacks.c.

Ya en nuestro callbacks.c agregamos el siguiente codigo.

codigo combobox

La función seleccionar es la asociada a la señal «changed» del Combo Box y la función abrir_ventana en la que esta asociada a la señal «show» de nuestra ventana. Como podemos ver el unico codigo nuevo para nosotros es el de rellenar el combo, lo cual se logra con la función:

gtk_combo_box_append_text(*combobox, *char)

Esta función agrega un elemento al final del combo eviandole el combo donde queremos agregar el elemento, el cual declaramos e inicializamos arriba, y el texto que deseamos agregar. El llenado del combo lo podemos hacer desde una variable, dentro de un ciclo, etc. Por ejemplo, llenamos el Combo Box con los elemento de un arreglo dentro del ciclo de recorrido del mismo.

Luego de compilar nuestra ventana el resultado de la corrida de nuestra ventana es:

combo corrida

2-. Check Button y Radio Button.

Estos widgets nos permiten hacer selecciones. Los Check Button nos permiten hacer selecciones multiples, mientras que los Radio Button una seleccion unica. Para ver la utilidad de estos widgets veamos un ejemplo. Diseñamos nuestra ventana con dos Check Button, dos Radio Button, dos label y un boton. En los label se mostrara que Check y Radio Button tenemos seleccionados, el boton lo usamos para verificar cual de los dos o si ambos Radio Check estan seleccionados.

radiocheck paleta

Luego que tenemos nuestra ventana diseñada, agregamos a cada unos de los Radio Button la señal «pressed«, y al boton le colocamos la señal «clicked«, colocamos el nombre que queramos a nuestros manejadores (handler). Una vez agregada las señales, guardamos, generamos el codigo necesario y vamos a nuestro callbacks.c, donde agregamos el siguiente codigo:

codigo radiocheck

La función radio1 y radio2 son las asociada a la señal «pressed» de los Radio Button, y que se activan cuando seleccionamos uno de los Radio Button. La unica función de gtk que no conocemos en este codigo es la función:

gtk_toggle_button_get_active(*toggle_button)

Como pueden ver es necesario enviarle el Check Button con un cast, ya que la funcion recibe es un tipo de togglebutton. Esta función retorna TRUE en caso de que el Check Button este seleccionado o FALSE en caso contrario. Esta función la colocamos como condicion de un if para saber cual Check Button esta o no seleccionado. Esta función tambien la podemos usar para saber si un Radio Button esta activo o no.

Luego de compilar nuestra ventana el resultado de la corrida seria algo asi:

radio-check corrida

3-. Calendario.

Este widget nos permite asignar o extraer una fecha seleccionada del mismo. Es muy util y practico si necesitamos hacer un formulario donde se manejen fechas y asi ahorrarnos validaciones de formato. Vamos a aprender como extraer una fecha seleccionada en el mismo.

calendario paleta

Primero necesitamos diseñar una ventana con un calendario y un label. Luego que ya tenemos nuestra ventana lista, agregamos la señal «day_selected» y le asignamos el nombre que queramos al manejador (Handler). Luego de esto, guardamos, generamos el codigo necesario de nuestra ventana y abrimos nuestro callbacks.c, donde agregamos el siguiente codigo:

codigo calendario

Declaramos tres variables del tipo «unsigned int» para el dia, mes y año. Tambien declaramos una cadena de caractares donde vamos a concatenar las variables para mostrar la fecha completa en el label. La función de gtk para extraer la fecha seleccionada en un calendario es:

gtk_calendar_get_date(*calendar, unsigned int *año, unsigned int *mes, unsigned int *dia)

Luego que ya tenemos los valores en cada una de nuestras variables solo nos queda concatenarlas en la cadena de caracteres fecha con la funcion «sprintf» de C. El resultado de la corrida es:

calendario corrida

4-. Image, File Chooser Dialog y Toolbar.

El widget Image nos permite mostrar una imagen en nuestra ventana, mientras que el File Chooser Dialog es el cuadro de dialogo que nos permite seleccionar archivo, con el mismo estilo de cualquier aplicacion gnome. Vamos a aprender como seleccionar una imagen y mostrarla en nuestra aplicación.

Primero necesitamos diseñar nuestra ventana a la cual le definimos un tamaño de 800(Width)x600(Height) , depues agregamos el widget File Chooser Dialog, image y el Toolbar.

image paleta

Seleccionamos el Toolbar, vamos a la ventana propiedades y el campo size lo definimos con el valor de 2. Luego de eso vemos que en el Toolbar hay dos cuadros grises donde vamos agregar un boton en cada uno. Seleccionamos un boton, vamos a la ventana propiedades y en el campo «Stock Button» seleccionamos abrir, para el otro boton hacemos lo mismo, pero esta vez seleccionando «salir» en el campo «Stock Button«. A cada uno de estos botones tambien agregamos la señal «clicked». Esta vez definimos el nombre que queramos para el manejador (handler) del boton «Abrir«, mientras que para el boton «Salir» seleccionamos el manejador (handler) de la lista que se llama gtk_main_quit que es la funcion de gtk que nos permite terminar un la ejecucion del programa.

Una vez nuestra ventana este lista, guardamos, generamos el codigo necesario de nuestra ventana y vamos al archivo callbacks.c, donde agregamos el código:

codigo image

Primero hacemos el lookup del widget image, luego de esto creamos un cuadro de dialogo, lo mostramos (gtk_widget_show) y ejecutamos (gtk_dialog_run). Como pudimos ver, el File Chooser tiene por defecto el boton Abrir y Cancelar, para poder saber que boton fue clickeado usamos unas funciones que nos permiten hacerlo. Para el boton abrir usamos GTK_RESPONSE_OK y GTK_RESPONSE_CANCEL para el boton de cancelar.

El bloque de instrucciones que esta dentro del if con la condición de GTK_RESPONSE_OK se escarga de capturar el nombre del archivo desde File Chooser con la función:

char* gtk_file_chooser_get_file_name(*file_chooser)

Esta función retorna un tipo de char* donde se alamacena el nombre con la dirección del archivo. Luego asignamos la imagen al widget image con la función:

gtk_image_set_from_file(*image, char*)

La cual recibe como parametro el widget «image» y una cadena de caracteres que contenga la ruta de la imagen, que en nuestro caso es la variable donde almacenamos el retorno de la función gtk_file_chooser_get_file_name. Por ultimo destruimos el File Chooser dialog (gtk_widget_destroy). Para el caso de GTK_RESPONSE_CANCEL solo destruimos el File Chooser Dialog.

Luego que compliamos nuestra ventana la corrida despues de abrir una imagen nos queda asi:

image corrida

7 respuestas to “Programar con GTK (Lenguaje C) – Parte IV”

  1. sermod said

    Excelente

  2. arieh said

    Oye me ha gustado mucho tu Manual, estaba buscando algo asi… Felicitaciones…

    Por otro lado me preguntaba si podrias mandarme ese wallpaper q muestras en el screenshot donde aparece el logo de firefox, si puedes a mi mail, gracias. Desde colombia salu2.

  3. Ricardo said

    Excelente… Te toca hacer otro pero en perl!!! Gracias!!!

  4. PabloPerdomo said

    Man sos Dios. Increible te quedo este manual.
    Ojala hagas mas manuales como este.
    Saludos. Nos vemos.

  5. Walter said

    Buenas!

  6. Walter said

    Buenas!
    Hola, no me sale el del combobox, hago todo lo que dices y no me sale, no se que estare haciendo mal, pero ya llevo varios días intentando y no lo logro, ayudame.

  7. Edgardo said

    Exelente!!!. Me salvaste mi materia de programacion en la universidad.

    Saludos desde El Savador

Deja un comentario