Introducción a Gtk#

Finalmente hemos llegado a la parte emocionante; sí, asi es, es hora de entrar de lleno a la fabulosa experiencia de programar en Gtk# ( usando, por supuesto, C#, del que hemos ya hablado un poco en el anterior capítulo ).

Básicamente desarrollaremos el clásico "¡Hola Mundo!", paso por paso, y lo iremos "evolucionando" hasta que sea una aplicación que se asemeje al mundo real ;)

¡Hola Gtk#! - Nuestra primera aplicación usando Gtk#

Primero que nada, hay que observar que el .dll qu hemos estado utilizando hasta ahora en nuestras aplicaciones, System, simplemente no nos srive para las interfaces gráficas. Por ello, esta vez, usaremos dos namespaces más, Gtk y Gtk#, que son las librerías encargadas de porveernos las funcionalidades originales de Gtk+ en nuestro entorno Mono.

Aclarado este punto, vayamos directamente al código:

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        public static void Main ( string[] args ) {

                Application.Init();

                Window win = new Window(" Hola Mundo! ");

                win.Show();

                Application.Run();

        }

 }

Vayamos por partes: la primera línea que salta a la vista es Application.Run(), la cual se encarga de leer las opciones que fueron pasadas en la línea de comandos ( si es que las hubo y si es que están relacionadas con Gtk+ ), además de inicializar el entorno, la resolución actual, etc.

La siguiente, Window win = new Window(" Hola Mundo! ") crea una ventana, teniendo como título la cadena que se le pase ( en este caso, " Hola Mundo! " ). Así que con esta línea ya tendremos nuestra ventana.

Bien, ya tengo mi ventana, ahora es tiempo de mostrarla, así que usamos el método Show() de mi ventana ( win ), con lo cual cuando se ejecute mi aplicación, podré verla en pantalla.

Finalmente, Application.Run() se encarga de inicializar nuestra aplicación, haciendo que esté en un estado de inactividad gráfica ( que permanezca "dormida" ).

Compilando con Gtk#

La compilación necesitará que le pasemos un par de opciones más, siendo más específicos, que le indiquemos qué librerías a las deseamos que nuestra aplicación haga referencia al ejecutarse; estamos hablando de la librería gtk-sharp ( como es llamado el namespace que contiene nuestras respectivas definiciones de Gtk+ ).

De este modo, compilamos de la siguiente manera:

				[zero@localhost gtk#]$ mcs hola.cs -r gtk-sharp
				Compilation succeeded
				[zero@localhost gtk#]$
			

Con la opción -r le estamos indicando explícitamente a mcs que referencie hola.exe a la librería gtk-sharp.dll ( si hubieramos necesitado que hiciera referencia simplemente tendríamos que haber colocado la opción -r el número de veces necesarias ).

Así que si todo fue bien, simplemente tenemos que llamar a mono:

				[zero@localhost consol]$ mono proto.exe 
			

Label - Poniendole texto a nuestro ¡Hola Mundo!

No podríamos ir mejor. Bueno, en realidad tenemos que cerrar nuestra aplicación manualmente, lo cual no es precisamente perfecto, pero dejemos eso de un lado por el momento, y terminemos de crear nuestro gran " Hola Mundo ! ".

Primero que nada, tenemos que definir lo que es un contenedor. Un Contenedor ( container ) es todo cualquier widget ( objeto gráfico, aunque algunas veces no visible ) que sea capaz de tener dentro de sí a otros widgets. Ejemplos de esto, son las propias ventanas, los botones, las boxes ... y muchos más. En resumidas cuentas, si queremos agregar el texto " ¡ Hola Mundo ! " a nuestra ventanita, debemos usar a esta última como un contenedor.

La forma en la que un widget funciona como contenedor, se ve reflejada en el método Add(), el cual se encarga de recibir como parámetro un widget válido ( como nuestro texto, que es un Label, o etiqueta ), y "contenerlo". Así­ que simplemente definiremos nuestro texto, y consecuentemente lo agregaremos a nuestra ventana.

Antes que nada, definiremos un nuevo objeto del tipo Label ( etiqueta o texto ), con la ya conocida palabra new, Label lab = new Label(" ! Hola Mundo ! "). Inmediatamente usamos el método Add() con win, win.Add(lab). Finalmente, usamos el método Show() de lab para mostrarlo, lab.Show().

De esa manera tenemos:

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        public static void Main ( string[] args ) {

                Application.Init();

                Window win = new Window(" Hola Mundo! ");
                Label lab = new Label(" ¡ Hola Mundo ! ");

                win.Add(lab);

                lab.Show();
                win.Show();

                Application.Run();

        }

 }

Bueno ... nuestra ventana se ve un tanto, uh, extraña. Dada esta situación, antes de pasar a la parte de Señales y Eventos, jugaremos un poco para que nuestra aplicación se vea más bonita, por lo que vamos a alterar la propiedad int BorderWidth de la clase Window para definir el ancho del borde en pixeles ( válido para todos los widgets que sean contenedores ), con lo cual la ventana quedará más proporcionada.

Ya de paso, trabajaremos sobre un método que se encarga de establecer el tamaño de nuestra ventana, void SetDefaultSize ( int Width, int Height), que recibe como parámetros la anchura y la altura; es válida sólo para la clase Window.

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        public static void Main ( string[] args ) {

                // Esta linea es indispensable en todas nuestras aplicaciones
                Application.Init();

                Window win = new Window(" Hola Mundo! ");
                Label lab = new Label(" ¡ Hola Mundo ! ");

                win.BorderWidth = 10; // Especificamos el ancho del borde
                win.SetDefaultSize(200, 200); // Especificamos el tamaño

                win.Add(lab);

                lab.Show();
                win.Show();

                Application.Run();
 
        } 
 
 }

De nuevo, la ejecutamos con mono, y deberíamos ver :

¡ Felicidades, ha creado su primer " ¡Hola Mundo! " !, ahora es tiempo de tener control sobre nuestra aplicación.