<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>4 bits blog &#187; GTK</title>
	<atom:link href="http://blog.4bits.es/category/linux/gtk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.4bits.es</link>
	<description>Ahora en 16 colores</description>
	<lastBuildDate>Thu, 05 Aug 2010 13:52:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Aprendiendo GTK+: Destripando los widgets</title>
		<link>http://blog.4bits.es/aprendiendo-gtk-destripando-widgets/</link>
		<comments>http://blog.4bits.es/aprendiendo-gtk-destripando-widgets/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 07:00:49 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[GTK]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=103</guid>
		<description><![CDATA[Aunque comencé explicándoos como funcionan las ventanas y los contenedores de GTK+ creo que lo mejor habría sido explicar primero qué son y cómo funcionan los widgets de GTK+. Así que aquí viene una explicación sobre los widgets. La clase GtkWidget Es la clase básica de la que parte cualquier otro widget de GTK+, esta [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque comencé explicándoos como funcionan las <a href="http://blog.4bits.es/aprendiendo-gtk-ventanas/">ventanas</a> y los <a href="http://blog.4bits.es/aprendiendo-gtk-contenedores/">contenedores</a> de GTK+ creo que lo mejor habría sido explicar primero <strong>qué son y cómo funcionan los <em>widgets</em> de GTK+</strong>. Así que aquí viene una explicación sobre los <em>widgets</em>.</p>
<h3>La clase GtkWidget</h3>
<p>Es la clase básica de la que parte cualquier otro <em>widget</em> de GTK+, esta clase en sí misma no hace nada específico (por ejemplo: un cuadro de texto, un botón, &#8230;) para ello existen clases específicas, como las ventanas o los contenedores. Estas clases más específicas heredan de la clase <strong><a href="http://library.gnome.org/devel/gtk/stable/GtkWidget.html">GtkWidget</a></strong> las funciones, atributos y señales básicas que les hacen ser clases válidas para poder usarse en GTK+.</p>
<h3>Partes esenciales de un widget</h3>
<p>Como cualquier clase de cualquier lenguaje de programación orientado a objetos, la clase de un <em>widget</em> se divide en:</p>
<ul>
<li><strong>Funciones:</strong> Son las funciones que permiten trabajar con dicha clase. Aquí las llamo funciones porque estamos trabajando sobre C, si fuera sobre cualquier lenguaje de programación orientado a objetos las llamaría métodos.</li>
<li><strong>Atributos (o propiedades):</strong> Son variables asociadas a la clase que identifican propiedades de ésta, por ejemplo: el color, la altura, &#8230;</li>
<li><strong>Señales:</strong> Muchos lenguajes de programación orientada a objetos no usan señales, pero en GTK+ son necesarias para controlar los eventos.<br />
Las señales identifican el evento que se ha producido, y se deben asociar a alguna función para que GTK+ al interceptar la señal ejecute dicha función, por ejemplo: al pulsar un botón que se escriba un mensaje en un cuadro de texto, la señal sería la pulsación del botón y la función asociada a ella la escritura del mensaje en el cuadro de texto.</li>
</ul>
<p>De este modo, en <a href="http://library.gnome.org/devel/gtk/stable/">la documentación de la API de GTK+</a>, se puede observar que cada <em>widget</em> se descompone en estas partes para que sepamos claramente qué se puede hacer y/o qué tareas realiza dicho <em>widget</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/aprendiendo-gtk-destripando-widgets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprendiendo GTK+: Ventanas</title>
		<link>http://blog.4bits.es/aprendiendo-gtk-ventanas/</link>
		<comments>http://blog.4bits.es/aprendiendo-gtk-ventanas/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 16:43:50 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[GTK]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=93</guid>
		<description><![CDATA[He aquí otro capítulo de esta serie que deje abandonada hace tiempo, ya que cuando uno empieza a trabajar le quedan pocas ganas al llegar a casa de ponerse a pensar, pero resulta que desde hace días me han venido las ganas de revitalizar este blog. Las ventanas Las ventanas son los widgets raíces, ya [...]]]></description>
			<content:encoded><![CDATA[<p>He aquí otro capítulo de esta serie que deje abandonada hace tiempo, ya que cuando uno empieza a trabajar le quedan pocas ganas al llegar a casa de ponerse a pensar, pero resulta que desde hace días me han venido las ganas de revitalizar este blog.</p>
<h3>Las ventanas</h3>
<p>Las ventanas son los widgets raíces, ya que sin ellas no podría haber aplicación. Hereda las propiedades de GtkContainer, por lo que puede contener a otro widget <em>(¡cuidado! sólo a uno)</em>, por lo que lo normal es que dentro de una ventana se introduzca un GtkBox de algún tipo, en el que se coloquen el resto de widgets de la aplicación.</p>
<p>Como veis en el título digo <em>ventanas</em>, y es que <a href="http://library.gnome.org/devel/gtk/stable/WindowWidgets.html">hay varios tipos de ventanas</a>:</p>
<ul>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkDialog.html">GtkDialog</a>: Crea una ventana emergente. Dentro de este tipo de ventanas existen varios tipos predefinidos como el dialogo de &#8220;Acerca de&#8221;, el de elección de archivo, el de elección de color, &#8230;</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkInvisible.html">GtkInvisible</a>: Crea una ventana invisible.</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkMessageDialog.html">GtkMessageDialog</a>: Crea una ventana con un mensaje personalizado, es uno de los tipos predefinidos del GtkDialog. Son las ventanas que muestran mensajes de error, advertencia, &#8230;</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkWindow.html">GtkWindow</a>: Crea una ventana normal y corriente. Será el widget que se use como base para cualquier aplicación.</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkAssistant.html">GtkAssistant</a>: Crea un asistente para guiar al usuario en varios pasos.</li>
</ul>
<p>Como he dicho, de todos estos tipos el más importante es GtkWindow, que es la ventana normal y corriente que tiene cualquier aplicación.</p>
<p>Como cualquier widget de GTK, GtkWindow es muy fácil de manejar con echar un ojo a la documentación de la API se aprende rápido como funciona todo. A continuación os pongo un trozo de código en el que creo una ventana vacía:</p>
<pre class="brush:c">#include &lt;gtk/gtk.h&gt;

int main (int argc, char *argv[]) {

    GtkWindow *window;

    gtk_init (&#038;argc, &#038;argv);

    window = (GtkWindow *) gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (window, "Soy una ventana");

    g_signal_connect (G_OBJECT (window), "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);

    gtk_widget_show_all (GTK_WIDGET (window));
    gtk_main ();

    return 0;
}</pre>
<p>Este código muestra una ventana con el título <em>Soy una ventana</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/aprendiendo-gtk-ventanas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Aprendiendo GTK+: Contenedores</title>
		<link>http://blog.4bits.es/aprendiendo-gtk-contenedores/</link>
		<comments>http://blog.4bits.es/aprendiendo-gtk-contenedores/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 17:44:23 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[GTK]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/aprendiendo-gtk-contenedores/</guid>
		<description><![CDATA[A partir de este capítulo intentaré explicaros los widgets, que considero básicos, de GTK+ y a partir de ahí seréis vosotros quienes tengáis que ampliar conocimientos. Pero antes de eso todavía toca explicar una de las características de GTK+, que quizá le hacen algo especial respecto a otros, son los contenedores. Los contenedores Una aplicación [...]]]></description>
			<content:encoded><![CDATA[<p>A partir de este capítulo intentaré explicaros los widgets, que considero básicos, de GTK+ y a partir de ahí seréis vosotros quienes tengáis que ampliar conocimientos. Pero antes de eso todavía toca explicar una de las características de GTK+, que quizá le hacen algo especial respecto a otros, son los contenedores.</p>
<h3>Los contenedores</h3>
<p>Una aplicación GTK+ viene definida por un widget de una ventana (que explicaré más adelante) en el cual se colocan los otros widgets (entradas de texto, etiquetas, botones, &#8230;) para formar una interfaz gráfica de usuario. La peculiaridad de GTK+ es cómo se colocan dichos widgets, para ello se hacen uso de otros widgets llamados contenedores, éstos sirven para (como su propio nombre indica) contener otros widgets, de modo que para distribuir los widgets por la ventana primero deberemos colocar algún contenedor sobre el cual <em>insertar</em> dichos widgets. Esto hace de GTK+ diferente a otros lenguajes de interfaces gráficas, en los cuales los widgets se colocan por coordenadas.</p>
<p>Hay varios widgets básicos de contenedores:</p>
<ul>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkHBox.html">GtkHBox</a>: Es un contenedor horizontal, quiere decir que los widgets se colocan horizontalmente.</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkVBox.html">GtkVBox</a>: Es un contenedor vertical, quiere decir que los widgets se colocan verticalmente.</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/GtkTable.html">GtkTable</a>: Crea una tabla de MxN contenedores, los widgets se colocan en la posición AxB que queramos dentro de nuestra tabla MxN. Este se diferencia del resto en las funciones usadas para colocar los widgets, usará las suyas propias en lugar de las de GtkBox que explicaré a continuación.</li>
</ul>
<p><em>(Como podéis ver os enlazo a <a href="http://library.gnome.org/devel/gtk/stable/index.html">la documentación de la API de GTK+</a> para cada widget, para mí es el mejor recurso de documentación.)</em></p>
<p>Los widgets GtkHBox y GtkVBox, como podéis ver en la API, sólo tienen una función asociada:</p>
<ul>
<li>
<pre>GtkWidget *gtk_hbox_new (gboolean homogeneous, gint spacing);</pre>
<p>Esta función sirve para crear un GtkHBox (para GtkVBox habría que cambiar hbox por vbox en el nombre de la función). Recibe dos parámetros que sirven para que los widgets se distribuyan en tamaños iguales (<strong>homogeneous</strong>) y para definir los pixels por defecto entre widgets (<strong>spacing</strong>).</li>
</ul>
<p>Hay que entender que para que estos widgets ejerzan de contenedores hay que usar las funciones de <a href="http://library.gnome.org/devel/gtk/stable/GtkBox.html">GtkBox</a>, que es algo así como una interfaz que define operaciones para sus hijos, entre ellos los anteriores widgets. De GtkBox, las funciones más importantes son:</p>
<ul>
<li>
<pre>gtk_box_pack_start (GtkBox *box, GtkWidget *child, gboolean expand,
			gboolean fill, guint padding);</pre>
<p>Esta función sirve para colocar widgets de izquierda a derecha (en cualquier GtkHBox) o de arriba a abajo (en cualquier GtkVBox).</li>
<li>
<pre>gtk_box_pack_end (GtkBox *box, GtkWidget *child, gboolean expand,
			gboolean fill, guint padding);</pre>
<p>Esta función sirve para colocar widgets al revés que la anterior.</li>
</ul>
<p>Donde los parámetros de cada una de estas funciones son:</p>
<ul>
<li><strong>box:</strong> Es el contenedor en el que se va a colocar el widget pasado como parámetro <strong>child</strong>.</li>
<li><strong>child:</strong> El widget que queremos colocar en <strong>box</strong>.</li>
<li><strong>expand y fill:</strong> Estos parámetros no sabría explicarlos bien, ya que lo mejor es ver el resultado de modificar cada uno. En el ejemplo que dejaré al final podréis comprenderlo mejor.</li>
<li><strong>padding:</strong> Este es fácil para cualquiera que haya hecho una web, es el espacio (en pixels) que se dejará entre el widget y los vecinos de éste, o el borde del contenedor si es el primero o último.</li>
</ul>
<p>También existen otras dos funciones que nos ahorran trabajo si queremos dejar los paráemtros por defecto de los contenedores, éstas son:</p>
<ul>
<li>
<pre>gtk_box_pack_start_defaults (GtkBox *box, GtkWidget *widget);</pre>
<p>Esta función sirve para colocar widgets de izquierda a derecha (en cualquier GtkHBox) o de arriba a abajo (en cualquier GtkVBox).</li>
<li>
<pre>gtk_box_pack_end (GtkBox *box, GtkWidget *widget);</pre>
<p>Esta función sirve para colocar widgets al revés que la anterior.</li>
</ul>
<p>Para que podáis entender esto mejor os dejo <a href="http://www.box.net/shared/a76kacj8co">este ejemplo</a>, es el que viene en el tutorial oficial de GTK+.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/aprendiendo-gtk-contenedores/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aprendiendo GTK+: Primeros pasos</title>
		<link>http://blog.4bits.es/aprendiendo-gtk-primeros-pasos/</link>
		<comments>http://blog.4bits.es/aprendiendo-gtk-primeros-pasos/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 13:05:14 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[GTK]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/aprendiendo-gtk-primeros-pasos/</guid>
		<description><![CDATA[Iniciando GTK+ Antes de empezar con otra cosa, voy a explicar como iniciar GTK+ en nuestra aplicación. Los pasos más importantes son los siguientes: Hay que inicializar el toolkit, para ello se llama a la siguiente función: gtk_init (int *argc, char **argv[]); Esta función se usa para iniciar el toolkit y parsear los parámetros relativos [...]]]></description>
			<content:encoded><![CDATA[<h3>Iniciando GTK+</h3>
<p>Antes de empezar con otra cosa, voy a explicar como iniciar GTK+ en nuestra aplicación. Los pasos más importantes son los siguientes:</p>
<ol>
<li>Hay que inicializar el <em>toolkit</em>, para ello se llama a la siguiente función:
<pre>gtk_init (int *argc, char **argv[]);</pre>
<p>Esta función se usa para iniciar el <em>toolkit</em> y <em>parsear</em> los parámetros relativos a GTK+ que reciba nuestra aplicación, de modo que GTK+ los use y no nos tengamos de preocupar de <em>parsearlos</em> nosotros, dichos parámetros son eliminados de la lista.</li>
<li>Ejecutar el <em>main loop</em> (o bucle principal), éste se encarga de dejar a la aplicación en un bucle, hasta que llamemos a la función de salida de dicho bucle, en el cual se tratan las diferentes señales que se produzcan en nuestra aplicación. Para ello se llama a la siguiente función:
<pre>gtk_main ();</pre>
<p>Para salir del bucle se llama a la siguiente función:</p>
<pre>gtk_main_quit ();</pre>
</li>
<p>Obviamente, antes de ejecutar el main loop se deberán tener los manejadores de las señales asignados y todas las variables inicializadas, ya que una vez se ejecuta no tendremos control sobre nada de la aplicación.
</ol>
<h3>Señales</h3>
<p>Una vez explicado como se inicia y ejecuta GTK+, hay que conocer como se manejan las diferentes señales de los widgets de GTK+. Para ello, se deben conocer las diferentes señales que lanza cada widget y los prototipos de funciones asociadas a cada señal, normalmente todas usan el mismo prototipo pero algunas tienen un prototipo asociado que es diferente a los demás. De todos modos, se usan las mismas funciones para conectar las señales a su manejador.</p>
<p>Las funciones para conectar las señales a un manejador son:</p>
<pre>gulong g_signal_connect (gpointer *object, const gchar *name,
          GCallback func, gpointer func_data);</pre>
<p>Donde los parámetros son:</p>
<ul>
<li><strong>object:</strong> El widget que lanza la señal. Aunque se debe pasar como un objeto de GObject, esto no es importante ya que realmente es un mero casting y no hay que saber como funciona GObject.</li>
<li><strong>name</strong>: El nombre de la señal del widget a la que queremos conectar un manejador.</li>
<li><strong>func:</strong> El nombre de la función del manejador.</li>
<li><strong>func_data:</strong> El parámetro de la función del manejador.</li>
</ul>
<p>Las funciones del manejador de cada señal deben tener un prototipo definido en la documentación de la API de GTK+, aunque normalmente suelen ser uno de estos dos:</p>
<pre>void func (GtkWidget *widget, gpointer data);
gboolean func (GtkWidget *widget, GdkEvent *event, gpointer data);</pre>
<p>El primer prototipo es el más usado (por lo menos en lo que yo he visto), el segundo se suele usar en algunas señales específicas que cuando se lanzan puede que una vez tratadas lancen otra a continuación o no (de ahí el valor de retorno de tipo <em>gboolean</em>).</p>
<p>Lo importante es saber como se conectan las señales a su manejador, los prototipos siempre es mejor consultarlos en la API de GTK+ para la señal que queremos tratar, por si las moscas.</p>
<h3>Hola mundo</h3>
<pre class="brush:c">#include &lt;gtk/gtk.h&gt;

/* delete_event: Decide si destruir la ventana GTK+ o no */
static gboolean delete_event (GtkWidget *widget,
					GdkEvent *event, gpointer data) {

	/* Si se devuelve TRUE no se lanza la señal "destroy" */
	//g_print ("delete_event: No se destruye la ventana.\n");
	//return TRUE;

	/* Si se devuelve FALSE se lanza la señal "destroy" */
	g_print ("delete_event: Se destruye la ventana.\n");
	return FALSE;
}

/* destroy: Termina la ejecución de la aplicación GTK+ */
static void destroy (GtkWidget *widget, gpointer data) {

	/* Fin de la ejecución de GTK+ */
	gtk_main_quit ();
}

static void hola_mundo (GtkWidget *widget, gpointer data) {

	g_print ("hola mundo\n");
}

int main (int argc, char *argv[]) {

	GtkWidget *window;
	GtkWidget *button;

	gtk_init (&#038;argc, &#038;argv);

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	g_signal_connect (G_OBJECT (window), "delete_event",
				G_CALLBACK (delete_event), NULL);
	g_signal_connect (G_OBJECT (window), "destroy",
				G_CALLBACK (destroy), NULL);

	button = gtk_button_new_with_label ("Hola");
	g_signal_connect (G_OBJECT (button), "clicked",
				G_CALLBACK (hola_mundo), NULL);

	gtk_container_add (GTK_CONTAINER (window), button);
	gtk_widget_show_all (window);

	gtk_main ();

	return 0;
}</pre>
<p>En principio, no hace falta que entendáis todo, ya que hay creación de widgets y cosas que todavía no he explicado, pero más o menos podéis ver la idea que hay detrás de usar GTK+.</p>
<p>Para compilarlo, se debe ejecutar lo siguiente (usando gcc como compilador):</p>
<pre>gcc -Wall hola.c -o hola `pkg-config --cflags gtk+-2.0 --libs gtk+-2.0`</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/aprendiendo-gtk-primeros-pasos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprendiendo GTK+: Introducción</title>
		<link>http://blog.4bits.es/aprendiendo-gtk-introduccion/</link>
		<comments>http://blog.4bits.es/aprendiendo-gtk-introduccion/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 17:37:52 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[GTK]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/aprendiendo-gtk-introduccion/</guid>
		<description><![CDATA[Desde hace tiempo vengo queriendo hacer una serie de posts para explicar (a la vez que yo aprendo) a programar interfaces gráficas usando GTK+, que es el toolkit usado por las aplicaciones de GNOME, aunque es multiplataforma y puede ser usado en varios sistemas operativos (Windows, Mac). En esta serie de posts no planeo explicar [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace tiempo vengo queriendo hacer una serie de posts para explicar (a la vez que yo aprendo) a programar interfaces gráficas usando <a href="http://www.gtk.org/">GTK+</a>, que es el <em>toolkit</em> usado por las aplicaciones de GNOME, aunque es multiplataforma y puede ser usado en varios sistemas operativos (Windows, Mac).</p>
<p>En esta serie de posts no planeo explicar todo al detalle, ya que existen muy buenos documentos para ello, pero sí quiero dar unas nociones básicas para que cualquiera pueda desenvolverse luego y seguir aumentando sus conocimientos sin mucho esfuerzo, además yo voy a ir aprendiendo paralelamente a estos posts, así que puede que tengan fallos, perdonadme por ello.</p>
<h3>Introducción: Diseño de interfaces gráficas</h3>
<p>Lo primero que quiero es realizar una pequeña introducción al diseño (desde el punto de vista de la programación, eso siempre) de las interfaces gráficas, desde un punto de vista genérico, es decir, sin relación a un lenguaje o plataforma específica.</p>
<p>Una interfaz gráfica es un <em>medio</em> por el cual el usuario trabaja con la aplicación de una manera gráfica, normalmente usando entornos de ventanas. Se diferencia de una interfaz de texto, en que en éstas el usuario trabaja con la aplicación introduciendo texto, normalmente usando órdenes en consolas.</p>
<p>El diseño de una interfaz gráfica se basa en objetos (en GTK+ se les conoce como <em>widgets</em>) como pueden ser botones, cuadros de texto, menús, etc&#8230; que permiten realizar acciones específicas. Estos objetos, a nivel de programación, tendrán unas propiedades y, lo más importante, unos eventos (o señales) que se dispararán cuando se realice algún tipo de acción sobre ellos (por ejemplo: se pulsa un botón, se introduce texto en un cuadro de texto, &#8230;)</p>
<p>Para mí, lo más importante es entender que estos eventos deben ser tratados inmediatamente, para ello normalmente se relaciona una función y unos datos a un evento, de este modo cada vez que se produzca dicho evento se ejecutará la función junto a los datos que tenga relacionados.</p>
<h3>¿Qué es GTK+?</h3>
<p>GTK+ es un <em>toolkit</em>, o una librería, para programar las interfaces gráficas de una aplicación. Está escrito en C, aunque dispone de <em>bindings</em> para bastantes lenguajes (C++, Python, &#8230;).</p>
<p>Además, se complementa con otra serie de librerías del proyecto GNOME, como son:</p>
<ul>
<li><strong>GLib</strong> (no confundir con la librería GNU de C), es una librería que ofrece un montón de funciones y tipos de datos (simples y compuestos) con los que poder trabajar de forma sencilla.</li>
<li><strong>Pango</strong>, es la librería que se encarga de la impresión del texto en pantalla, soporta internacionalización de modo que se pueda escribir en multitud de lenguajes sin alfabeto tradicional.</li>
</ul>
<p>GTK+ se basa en GObject, del cual no conozco mucho, pero se puede decir que es una manera de programar en C con una orientación a objetos.</p>
<h3>Documentación para iniciarse</h3>
<p>Para iniciarse lo mejor sin duda es leer documentos que expliquen paso a paso como realizar cosas cada vez más complejas, para ello se pueden usar los siguientes documentos:</p>
<ul>
<li><a href="http://www.gtk.org/tutorial/">Tutorial oficial de GTK+</a>.</li>
<li><a href="http://es.gnome.org/Documentacion/Desarrollo">Documentación de desarrollo en GNOME (por GNOME Hispano)</a>. (No está completa, pero van avanzando)</li>
<li><a href="http://library.gnome.org/devel/gtk/stable/">API de GTK+</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/aprendiendo-gtk-introduccion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
