Introducción a Gtk#: Desarrollando aplicaciones gráficas con el entorno MONO. | ||
---|---|---|
Anterior | Introducción a Gtk# | Siguiente |
Aprovecharemos nuestro conocimiento sobre señales y eventos para hacer algo menos estático. ¿Qué tal si agregamos un botón a nuestra a aplicación? Perfecto. pero antes que nada, revisaremos como se define un botón, algunas cosas importantes que destacar, etc.
Un botón se crea mediante la clase Button, con el ya conocido new(), el cuál tiene dos constructores básicos:
public Button ( string label ), el cual cre el botón con label como etiqueta.
public Button (), el cual crea un botón sin etiqueta.
public static Button NewFromStock ( string stock_id ), el cual propiamente no es un constructor, sino un método estático que regresa un objeto Button de tipo pre-definido ( hablaremos de él más adelante ).
A final de cuentas, tenemos dos constructores y un método para crear botones, con lo cual ya podemos proceder a escribir nuestra aplicación, un "¡Hola Mundo!" con un botón.
![]() | El próximo ejemplo se basará en un ejemplo existente en la página de MonkeyGuide ( http://mono.jroith.de/monkeyguide/ ), y es de la autoría de Johannes Roith. |
De nuevo procederemos en la forma tradicional, definiendo lo "básico":
using System; using Gtk; using GtkSharp; public class Tester { /* Estos método se encargan de mostrar en la terminal el * mensaje y después detener la aplicación. */ static void DetenerAplicacion ( object obj, DeleteEventArgs args ) { Console.WriteLine("Ha ocurrido el evento DeleteEvent "); Application.Quit(); } public static void Main ( string[] args ) { // Esta linea es indispensable en todas nuestras aplicaciones Application.Init(); Window win = new Window(" ¡Hola Mundo! "); Button boton = new Button(" ¡Hola Mundo! "); win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion); win.BorderWidth = 10; // Especificamos el ancho del borde win.Add(boton); // Mostramos TODOS los widgets definidos como hijos de win win.ShowAll(); Application.Run(); } } |
Todo bien hasta aquí. Solamente hay que poner atención en la línea win.ShowAll(), que se encarga de mostrar a todos los widgets que estén contenidos dentro de, en este caso, el objeto win de tipo Window. Des esta forma, nos podemos ahorrar unas cuantas listas, ya que equivale a ejecutar el método Show() para cada elemento.
De acuerdo, ya podemos tener cierto control sobre la aplicación, solamente que ... pues nuestro botón está de adorno, pues al presionarlo, no sucede algo en especial. Así que implementaremos un Callback Method ( de ahora en adelante lo llamaremos "callback" para ahorrar saliva :P ), que muestre un mensaje en la terminal, y le llamaremos MiCallback, pasándolo a través de un EventHandler al evento Clicked de la clase Button ( este evento sucede al ser oprimido el botón ).
using System; using Gtk; using GtkSharp; public class Tester { /* Estos método se encargan de mostrar en la terminal el * mensaje y después detener la aplicación. */ static void MiCallback ( object obj, EventArgs args ) { Console.WriteLine(" ¡Hola Mundo! "); Application.Quit(); } static void DetenerAplicacion ( object obj, DeleteEventArgs args ) { Console.WriteLine("Ha ocurrido el evento DeleteEvent "); Application.Quit(); } public static void Main ( string[] args ) { // Esta linea es indispensable en todas nuestras aplicaciones Application.Init(); Window win = new Window(" ¡Hola Mundo! "); Button boton = new Button(" ¡Hola Mundo! "); win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion); win.BorderWidth = 10; // Especificamos el ancho del borde win.Add(boton); // Conectamos Micallback con el evento Clicked de boton boton.Clicked += new EventHandler(MiCallback); // Mostramos TODOS los widgets definidos como hijos de win win.ShowAll(); Application.Run(); } } |
¡Qué bien, ahora al presionar el botón ya hace algo!, sí, cierra la ventana después de saludarnos en la terminal. Este ejemplo también nos sirve para ver que el método Application.Quit() también puede ser llamado desde callbacks "comunes y corrientes".
Hemos llegado a la última sección de la parte de botones ( aunque seguiremos revisándolos en las siguientes secciones ), abordando la creación de botones pre-definidos. Recordemos simplemente que para crear este tipo de botones, no contamos con un constructor como tal, sino con un método llamado Button NewFromStock ( string stock_id ), que recibe la cadena que especificará el tipo de botón.
Porque dicen que es mejor practicar que solamente leer, pasemos a crear nuestra pequeña aplicación:
using System; using Gtk; using GtkSharp; public class Tester { /* Estos método se encargan de mostrar en la terminal el * mensaje y después detener la aplicación. */ static void MiCallback ( object obj, EventArgs args ) { Console.WriteLine(" ¡Hola Mundo! "); Application.Quit(); } static void DetenerAplicacion ( object obj, DeleteEventArgs args ) { Console.WriteLine("Ha ocurrido el evento DeleteEvent "); Application.Quit(); } public static void Main ( string[] args ) { // Esta linea es indispensable en todas nuestras aplicaciones Application.Init(); Window win = new Window(" ¡Hola Mundo! "); Button boton = Button.NewFromStock(Gtk.Stock.Ok); win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion); win.BorderWidth = 10; // Especificamos el ancho del borde win.Add(boton); // Conectamos Micallback con el evento Clicked de boton boton.Clicked += new EventHandler(MiCallback); // Mostramos TODOS los widgets definidos como hijos de win win.ShowAll(); Application.Run(); } } |
![]() | Una lista completa de los Stock_id puede ser encontrada en la página de MonkeyGuide, http://mono.jroith.de/monkeyguide/gnome/bindings/gtk-sharp/gtk-sharp.html |