Glade era un editor de interfaces de usuario en GTK que guardaba la descripción de la misma en un XML que posteriormente se podía parsear con el lenguaje que tuviera "bindings" a GTK y libglade.
En Windows (W2000, si no recuerdo mal) |
En Linux (gestor de ventanas, IceWM) |
No es un código del que sentirse orgulloso, pero bueno, eran mis primeros pasos con Python :)
euroconversor.py:
from funciones import interfaz app=interfaz.EuroConversor() app.a_correr()
uno.glade
<?xml version="1.0"?> <GTK-Interface> <project> <name>Aplicacion</name> <program_name>aplicacion</program_name> <directory></directory> <source_directory>src</source_directory> <pixmaps_directory>pixmaps</pixmaps_directory> <language>C</language> <gnome_support>False</gnome_support> <gettext_support>False</gettext_support> </project> <widget> <class>GtkWindow</class> <name>window1</name> <signal> <name>destroy</name> <handler>on_window1_destroy</handler> <last_modification_time>Thu, 08 Aug 2002 16:22:11 GMT</last_modification_time> </signal> <title>Conversor</title> <type>GTK_WINDOW_TOPLEVEL</type> <position>GTK_WIN_POS_CENTER</position> <modal>False</modal> <allow_shrink>False</allow_shrink> <allow_grow>False</allow_grow> <auto_shrink>False</auto_shrink> <widget> <class>GtkVBox</class> <name>vbox2</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <widget> <class>GtkLabel</class> <name>label1</name> <label>Euro Conversor: Introduzca la cantidad a convertir</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>10</xpad> <ypad>10</ypad> <child> <padding>0</padding> <expand>True</expand> <fill>True</fill> </child> </widget> <widget> <class>GtkHBox</class> <name>hbox2</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> <padding>0</padding> <expand>True</expand> <fill>True</fill> </child> <widget> <class>GtkLabel</class> <name>label2</name> <label>Pesetas</label> <justify>GTK_JUSTIFY_RIGHT</justify> <wrap>False</wrap> <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>5</xpad> <ypad>5</ypad> <child> <padding>0</padding> <expand>True</expand> <fill>True</fill> </child> </widget> <widget> <class>GtkEntry</class> <name>entry1</name> <can_focus>True</can_focus> <signal> <name>key_press_event</name> <handler>on_entry1_key_press_event</handler> <last_modification_time>Mon, 12 Aug 2002 13:18:49 GMT</last_modification_time> </signal> <editable>True</editable> <text_visible>True</text_visible> <text_max_length>0</text_max_length> <text></text> <child> <padding>5</padding> <expand>False</expand> <fill>True</fill> </child> </widget> </widget> <widget> <class>GtkHBox</class> <name>hbox3</name> <homogeneous>False</homogeneous> <spacing>0</spacing> <child> <padding>0</padding> <expand>True</expand> <fill>True</fill> </child> <widget> <class>GtkLabel</class> <name>label3</name> <label>Euros</label> <justify>GTK_JUSTIFY_RIGHT</justify> <wrap>False</wrap> <xalign>0.5</xalign> <yalign>0.5</yalign> <xpad>5</xpad> <ypad>5</ypad> <child> <padding>0</padding> <expand>True</expand> <fill>False</fill> </child> </widget> <widget> <class>GtkEntry</class> <name>entry2</name> <can_focus>True</can_focus> <signal> <name>key_press_event</name> <handler>on_entry2_key_press_event</handler> <last_modification_time>Mon, 12 Aug 2002 13:18:59 GMT</last_modification_time> </signal> <editable>True</editable> <text_visible>True</text_visible> <text_max_length>0</text_max_length> <text></text> <child> <padding>5</padding> <expand>False</expand> <fill>True</fill> </child> </widget> </widget> </widget> </widget> </GTK-Interface>
__init__.py
__all__ = ["interfaz", "conversiones"]
conversiones.py
def validar_entrada1( texto ): try: return str(long(texto)) except ValueError: return "" def validar_entrada2( texto ): try: return str(float(texto)) except ValueError: return "" def pelas_a_euros( entrada ): #Aquí viene lo que han tecleado return "%.2f" % (float(entrada)/166.386) def euros_a_pelas( entrada ): #Aquí viene lo que han tecleado return "%d" % (float(entrada)*166.386)
interfaz.py
import libglade, gtk from funciones import conversiones class EuroConversor: def __init__(self): self.arbol = libglade.GladeXML( "aplicacion.glade", "window1" ) self.caja1 = self.arbol.get_widget( "entry1" ) self.caja2 = self.arbol.get_widget( "entry2" ) manejadores = { "on_entry1_key_press_event" : self.pasar, "on_entry2_key_press_event" : self.pasar, } self.arbol.signal_autoconnect( manejadores ) self.arbol.signal_connect( "on_window1_destroy", self.salir ) def a_correr(self): gtk.mainloop() def salir(self, obj): print "Saliendo..." gtk.mainquit() def pasar(self, obj, ev): """ En 'obj' viene el objeto que llama (la caja de texto), En 'ev' viene el evento, dir(ev) = keyval, send_event, state, string, time, type, window """ nombre = libglade.get_widget_name( obj ) if nombre == "entry1": entrada_validada1 = conversiones.validar_entrada1(obj.get_text() + ev.string) if entrada_validada1: self.caja2.set_text( conversiones.pelas_a_euros( entrada_validada1 ) ) else: self.caja1.set_text( "" ) self.caja2.set_text( "" ) elif nombre == "entry2": entrada_validada2 = conversiones.validar_entrada2(obj.get_text() + ev.string) if entrada_validada2: self.caja1.set_text( conversiones.euros_a_pelas( entrada_validada2 ) ) else: self.caja1.set_text( "" ) self.caja2.set_text( "" )
No hay comentarios:
Publicar un comentario