Está en la página 1de 11

GUÍA PRÁCTICA DE PROGRAMACIÓN CON C Y GTK+ EN

ENTORNOS GNU/LINUX

Por: Ricardo Arturo Guzmán Torres


www.quanaxoft.com
INTRODUCCIÓN

El inclinarnos hacia un lenguaje de programación para hacer una tarea determinada es una tarea algo
complicada, con tantas opciones que hay. Sin embargo, al trabajar en Linux veo muy poderoso el
utilizar como lenguaje el C. Con el tenemos un amplio repertorio de posibilidades. El problema es
cuando queremos realizar programas con interfaz gráfica, hacerlo con C es un proceso bastante difícil,
pero podemos optar por GTK+ (GIMP toolkit) como nuestro toolkit gráfico para realizar esta tarea.

La documentación para trabajar con GTK+ y C, en mi opinión es muy escasa y más para los
hispanohablantes. Es por eso que he decidido crear este documento, intentando apoyar un poco a la
comunidad con lo que espero pueda ser una interesante guía de referencia.

A lo largo de este libro, trataremos de cubrir con ejemplos cada capítulo. Recomiendo que tengas en
mente un proyecto en específico, en el cual puedas ir aplicando todos los conocimientos que vayamos
aprendiendo a lo largo del libro, para que al final tengas un buen programa con su interfaz gráfica que
puedas compartir con la comunidad Linuxera :) . Yo quise empezar a desarrollar este libro, por que
quiero darle una interfaz gráfica a varios programas que tengo en mente, uno es un generador de
diccionarios para análisis de seguridad, el cual compartiré con ustedes y mostraré el procedimiento
mediante el cual le generé su interfaz gráfica.
SOBRE EL AUTOR
No hay mucho que decir sobre mi, solo soy un programador mexicano que últimamente tiene mucho
tiempo libre. Es por eso que quiero invertir este tiempo en algo productivo y si puedo ayudar a alguien
más con este libro consideraré que la misión fue todo un éxito.

¿Por qué?
Yo he aprendido mucho de los artículos que he encontrado en Internet y se de lo importante que es el
que siempre se estén generando nuevas fuentes de información. Aparte que como ya comenté, veo muy
escasa la documentación en mi idioma y para las personas que no hablan inglés esto puede ser un gran
obstáculo. Quiero aprovechar mi tiempo ayudando, por que a mi me sirve como programador para
reafirmar y mejorar mis conocimientos y habilidades.

En mis tiempos libres me gusta mucho programar en C, sin embargo llevo algo de tiempo que no he
podido realizar un programa por el simple hecho de “amor al arte”. Me he dedicado más al desarrollo
web, páginas en PHP y AJAX.

Junto con unos amigos formé una empresa de desarrollo de software, nos ubicamos en León,
Guanajuato, México, pueden visitar nuestra página en: www.quanaxoft.com

Quisiera estar al pendiente de los comentarios que pudieran salir de las personas que vayan leyendo
este libro, si encuentras algún error o simplemente quieres platicar sobre algún tema de programación
te agradecería me dejaras un mensaje en mi blog: http://www.quanaxoft.com/blog , abriré un Post
donde vaya dándole seguimiento al libro y a los comentarios de los usuarios.
ANTES DE EMPEZAR
Conocimientos previos

– Es importante tener una base de programación en C


– Estar acostumbrado a trabajar en Linux a través de la terminal

Requerimientos

Este libro está orientado a la comunidad linuxera. Necesitamos tener GNU/Linux instalado, en mi caso
yo estoy trabajando con Ubuntu 9.10 (Karmic Koala). Necesitaremos tener instalado:

– Un compilador: Utilizaremos GCC a lo largo del libro


– Un editor de textos: Puedes utilizar el que gustes, como el VIM ... yo utilizaré uno que me
parece muy bueno que se llama Bluefish
– Un emulador de terminal: Siempre está incluido en las distros GNU/Linux la terminal :)
– Las librerías GTK+
– Y la aplicación pkg-config
CAPITULO 1
Sobre GTK+ y X Window System
Instalación de componentes
Antes de empezar, es importante que sepamos que es GTK+. Hago nota que en este libro no hablaré
sobre conceptos básicos de programación en C, este libro está orientado a gente que ya tenga un fondo
de conocimiento del lenguaje, trataremos de ir directamente hacia el uso del toolkit gráfico.

ACERCA DE GTK+

GTK+ o The GIMP Toolkit es un conjunto de bibliotecas multiplataforma para desarrollar interfaces
gráficas de usuario (GUI), principalmente para los entornos gráficos GNOME, XFCE y ROX aunque
también se puede usar en el escritorio de Windows, MacOS y otros.

Inicialmente fueron creadas para desarrollar el programa de edición de imagen GIMP, sin embargo
actualmente se usan bastante por muchos otros programas en los sistemas GNU/Linux. Junto a Qt es
una de las bibliotecas más populares para X Window System.

GTK+ se ha diseñado para permitir programar con lenguajes como C, C++, C#, Java, Ruby, Perl, PHP
o Python.

Licenciado bajo los términos de LGPL, GTK+ es software libre y es parte del proyecto GNU.

Entornos que utilizan GTK+

* GNOME está basado en GTK+, lo que significa que los programas de GNOME usan GTK+
* Xfce está basado en GTK+
* LXDE está basado en GTK+, significa "Lightweight X11 Desktop Environment"
* ROX Desktop un escritorio ligero, con características de la GUI de RISC OS
* GPE Palmtop Environment
* Maemo (Nokia's Internet-tablet framework)
* Access Linux Platform (sucesor de la plataforma Palm OS PDA)
* One Laptop Per Child usa GTK+ y PyGTK

Los entornos de escritorio no son necesarios para ejecutar los programas GTK+. Si las bibliotecas que
requiere el programa están instaladas, un programa GTK+ puede ser ejecutado por encima de otros
entornos basadas en X11 como KDE o cualquier otro entorno, lo que incluye Mac OS X, si X11.app
está instalado. GTK+ también puede ejecutarse en Microsoft Windows, es utilizado por algunas
aplicaciones populares multiplataforma como Pidgin y el GIMP. wxWidgets, un toolkit gráfico
multiplataforma usa GTK+ en sistemas tipo Unix.[1] Algunos de los ports más inusuales incluyen
directfb y ncurses.

Aplicaciones

Algunas aplicaciones que usan GTK+ como widget incluyen:

* AbiWord - Procesador de textos.


* CinePaint (ex FilmGimp) - Editor de gráficos animados en HDR.
* Ekiga (ex GnomeMeeting) - Software telefónico VoIP H.323/SIP.
* Evolution - Cliente de correo electrónico.
* Firefox - Navegador web.
* GIMP - Editor de gráficos.
* Gnumeric - Programa de hoja de cálculo.
* Chromium - Navegador Web basado en WebKit y desarrollado en gran medida por Google.
* GRAMPS - Software de genealogía.
* Inkscape - Editor de gráficos vectoriales SVG.
* K3D - Programa de modelado 3D libre.
* Marionnet - Un simulador de red interactivo.
* Midori - Navegador Web portable.
* Nero Linux - Un programa para la edición de discos.
* Pidgin - Cliente de mensajería instantánea.
* VMware Player - Maquina virtual.
* Wireshark - Capturador y analizador de paquetes de red inalámbrica.

Más información en: http://es.wikipedia.org/wiki/GTK%2B

ACERCA DEL X WINDOW SYSTEM

X Window System (en español sistema de ventanas X) es un software que fue desarrollado a
mediados de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este
protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo
transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que
está en uso actualmente. X es el encargado de mostrar la información gráfica de forma totalmente
independiente del sistema operativo.

X fue diseñado primariamente para implementar clientes ligeros, donde mucha gente usaba
simultáneamente la capacidad de procesamiento de un mismo computador trabajando en tiempo
compartido. Cada persona usaba un terminal en red que tenía capacidades limitadas para dibujar la
pantalla y aceptar la entrada del usuario. Debido a la ubicuidad del soporte para el software X en
Unix, es usado en los computadores personales incluso cuando no hay necesidad del tiempo
compartido.

El sistema de ventanas X distribuye el procesamiento de aplicaciones especificando enlaces cliente-


servidor. El servidor provee servicios para acceder a la pantalla, teclado y ratón, mientras que los
clientes son las aplicaciones que utilizan estos recursos para interacción con el usuario. De este modo
mientras el servidor se ejecuta de manera local, las aplicaciones pueden ejecutarse remotamente desde
otras máquinas, proporcionando así el concepto de transparencia de red.

Debido a este esquema cliente-servidor, se puede decir que X se comporta como una terminal gráfica
virtual.

Más información en: http://es.wikipedia.org/wiki/X_Window_System


INSTALANDO GTK+

Bueno, mostraré en este capítulo el método para instalar las aplicaciones y librerías que necesitamos.
Estoy trabajando en Ubuntu 9.10 pero la forma de instalación creo que puede ser aplicable de igual
manera a otras distribuciones.

Necesitamos instalar GTK+ y sus dependencias, la ventaja de trabajar con distribuciones derivadas de
Debian es que podemos utilizar el package manager y facilitarnos las cosas. Necesitaremos también los
paquetes de desarrollo, los podemos reconocer por que tienen terminación -dev, o -devel para
distribuciones como Fedora Core (RPM).

Para instalar GTK+ necesitaremos Glib, Pango y algunos paquetes GTK+. Podemos descargarlos de la
página oficial de gtk: http://www.gtk.org/download-linux.html

Las versiones pueden cambiar con el paso del tiempo, pero en mi caso estos son los archivos que
descargué:

gtk+-2.22.0.tar.gz

Podemos instalar las dependencias de una manera rápida aprovechando que estamos en Ubuntu:

$ sudo aptitude install gnome-core-devel build-essential

De preferencia crearemos una nueva carpeta donde guardaremos el archivo de gtk que descargamos.
Los pasos a seguir son ejecutar los siguientes comandos desde la terminal, vamos a descomprimir el
archivo que bajamos:

$ tar -xvzf gtk+-2.22.0.tar.gz

Se nos creará una nueva carpeta: gtk+-2.22.0


$ cd gtk+-2.22.0/

En esta carpeta tenemos un shell script llamado configure , el cual debemos correr para que se vayan
creando los Makefiles necesarios para instalar el programa. El script configure puede recibir varios
parámetros, pero solo le indicaremos que instale gtk en la ruta /opt/gtk y confiaremos en las opciones
por default, ejecutamos entonces:

$ ./configure --prefix=/opt/gtk

Al hacerlo a mi me marca el siguiente error:

Requested 'atk >= 1.29.2' but version of Atk is 1.28.0


Requested 'gdk-pixbuf-2.0 >= 2.21.0' but version of GdkPixbuf is 2.18.3

Eso quiere decir que en el primer paso si se instaló atk y gdk-pixbuf pero la versión que tenemos es
inferior a la que necesita gtk para funcionar.

Entonces tenemos que bajar una versión de atk más reciente, la podemos encontrar buscando en
google, yo la encontré en: http://www.icewalkers.com/Linux/Software/514330/ATK.html

La descargamos y hacemos los pasos:

$ tar -xvzf atk-1.29.4.tar.gz


$ cd atk-1.29.4
$ ./configure
$ make
$ sudo make install

Ok, ahora buscamos para gdk-pixbuf una versión mas reciente, la podemos encontrar en:
http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.21/

Descomprimimos:

$ tar -xvzf gdk-pixbuf-2.21.3.tar.gz


$ cd gdk-pixbuf-2.21.3/

// Paso opcional, gdk-pixbuf requiere de la libreria libtiff, si no la tenemos hacemos:


$ sudo aptitude install libtiff-dev

Continuando con la instalación:


$ ./configure
$ make
$ sudo make install

Ok, entonces ya solucionamos el problema de las dependencias faltantes, nos faltaría nadamas ir otra
vez a la carpeta donde descomprimimos el gtk y volvemos al paso en que nos quedamos:

$ ./configure --prefix=/opt/gtk

Ok esta vez no marcó problemas asi que podemos proceder:

$ make
$ sudo make install

Una vez teniendo lista la instalación podemos proceder a lo divertido, programar!

Podemos encontrar más información del proceso de instalación en:


http://library.gnome.org/devel/gtk/stable/gtk-building.html

Si tienes algun problema al instalar comentalo en el foro: http://www.quanaxoft.com/blog si no puedo


ayudarte yo a lo mejor algun otro visitante si podrá.
CAPITULO 2
Nuestra primera aplicación
Conceptos básicos sobre GTK+
Bueno, ya tenemos preparado el terreno, Ya está instalado GTK+, tenemos nuestro compilador y un
confiable editor de textos. Solo nos falta empezar a programar. En este capítulo iremos cubriendo los
aspectos básicos que giran en torno a la programación de interfaces gráficas en C con GTK+.

Empezaremos creando una ventana sencilla, la cual estará a la espera del evento donde la cerremos. El
código es el siguiente:

/************************************/
/* MI PRIMER PROGRAMA CON GTK+ */
/************************************/

#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), "Mi primer programa");
gtk_widget_show (window);
gtk_main ();
return 0;
}

Empezaré a hablar a detalle sobre cada línea respectiva al código, pero primero veremos como
compilar este código (sirve que verificamos que realmente hayamos instalado bien GTK+).

Guardaremos el archivo como prueba.c, abriremos una terminal y ejecutaremos en el directorio donde
tengamos a prueba.c:

$ gcc -Wall -g prueba.c -o prueba `pkg-config --cflags --libs gtk+-2.0`


Se nos generará el ejecutable con el nombre de prueba, lo corremos en la terminal a través de:

$ ./prueba

También podría gustarte