Mi primer GUI con Gtk# y Mono.

El día de hoy porfin hice mi primer programa con el lenguaje C#, Gtk#, Glade y Mono con mis propios recursos, poco antes habia estado checando y siguiendo algunos tutoriales para medio entender el uso y combinación de estas herramientas, pero no habia tenido la oportunidad de dedicarme un rato y hacer un programa con lo que habia checado hasta el día de hoy.

A Simple Image Viewer

Este pequeño programa no es más que un simple visor de imagnes pero implica algunas propiedades interesantes para conocer un poco la estructura del lenguaje además de el uso de eventos y la forma de inteconectarse con una interface construida con Glade.

Este programa básicamente lo que hace es utilizar algunos controles básicos de gtk como son: botones, etiquetas, tablas, ventanas, etc. Además de que algunas cosas un poco más complejas como un selector de archivos, y un Widget llamado pixbuf que es el encargado de cargar la imagen y pasarcela al Widget de imagen. Todo lo anterior representaría mucho codigo si es que lo hicieramos a sin la ayuda del diseñador de interfaces (glade), pero gracias a el solo tenemos que dibujar la interface y despues indicarle a mono que va a jalar esa interface desde un archivo .glade y ya esta.

Para poder hacer el programita no fueron más que unas horas pero el resultado me agrado mucho, más que la primera imagen que cargue con el, ya que aquel rostro es una verdadera belleza. Pienso que este tipo de aplicaciones resultan muy entretenidas y muy educativas para aprender. Como dice Miguel de Icaza "No hay mejor forma para aprender a programar que programando".

Sí a alguien le interesa checar el codigo de este programita y correrlo lo puede hacer desde aquí ya que necesita un archivo de Glade para poder jalar. Pero de todas formas aquí también dejo el codigo para los que solo quieren hecharle un ojo.

using System;
using Glade;
using Gdk;
using Gtk;

class Visor {
        
        [Glade.Widget] Gtk.Window ventana;
        [Glade.Widget] Gtk.Image imagen;
        [Glade.Widget] Button boton;
        [Glade.Widget] Label label1;
        
        static FileSelection filew;
        static Pixbuf pixbuf;
               
        public Visor ()
        {
                Glade.XML xml;
                
                ventana = null;
                imagen = null;
                boton = null;
                
                xml = new Glade.XML ("./spv.glade","ventana",null);
                xml.Autoconnect (this);                           
        }
        
        public void Muestra ()
        {
                ventana.ShowAll ();
        }        
        
        public void file_ok_sel_event( object obj, EventArgs args)
        {
           try {
                pixbuf = new Pixbuf (filew.Filename);
                imagen.Pixbuf = pixbuf;
                ventana.Title = "Single photo viewer :: " 
                              + filew.SelectionEntry.Text;
                label1.Text = "Archivo: " + filew.Filename;
                filew.Destroy ();

            } catch (Exception e) {
              Console.WriteLine (e);
            }
        }
 
        static void delete_event (object obj, DeleteEventArgs args)
        {
            filew.Destroy ();
        }

        static void cancel_event (object obj, EventArgs args)
        {
            filew.Destroy ();
        }
                
        public void on_boton_clicked (object o, EventArgs args)
        {                     
           filew = new FileSelection("File selection");
                
           filew.DeleteEvent += new DeleteEventHandler (delete_event);
                
           filew.OkButton.Clicked +=new EventHandler (file_ok_sel_event);
  
           filew.CancelButton.Clicked +=new EventHandler (cancel_event);
                
           filew.Filename = " ";
               
           filew.Show ();                                     
        }
        
        void on_ventana_delete_event (object o, DeleteEventArgs args)
        {
           Application.Quit ();
           args.RetVal = true;
        }
}

class Principal {

        public static void Main () {
                
                Visor visor;
                               
                Application.Init ();                  
                                     
                visor = new Visor ();
                visor.Muestra ();
                
                Application.Run ();
        }
}

Y para compilarlo y correrlo solo necesitnan hacer lo siguiente:

  $mcs spv.cs -pkg:gtk-sharp,glade-sharp
  $mono spv.exe

Bookmark the permalink. RSS feed for this post.

One Response to Mi primer GUI con Gtk# y Mono.

deimos dijo...

Leyendo tu post y el mensaje que enviaste a la lista de XalaLinux, sólo me resta decir que que chido que por fin te decidiste a dejar de hacerle al monje y meterle de lleno a la programada, ya que alli como que si se te ve futurillo verdac.

Muchas Felicidades y sigue igual de aferrado.

Con tecnología de Blogger.

Search

Swedish Greys - a WordPress theme from Nordic Themepark. Converted by LiteThemes.com.