[Demostracion] Lo Fácil que Resulta Python – GUI’s

Python es un lenguaje que en lo personal me ha fascinado y que me he tomado (de poco en poco) el tiempo de estudiarlo.

Y es que realmente resulta muy facil programar en él, y para demostrar un poco el como es mostraré un ejemplo rápido de como ésa puede mostrarte la informacion de la fecha seleccionada en unas pocas lineas.

La interfaz fue diseñada en Glade, un diseñador de interfaces que guarda la informacion en un cómodo archivo XML compatible con muchos lenguajes y python es, por supuesto, uno de ellos.

Una vez creada nuestra ventana con sus elementos y agregando desde Glade los “manejadores” (equivalentes a listeners en otros lenguajes) es hora de la implementacion en python:

#Importamos las librerias requeridas
import sys
try:
	import pygtk
	pygtk.require("2.0")
except Exception, e:
	print "error al importar pygtk"
	sys.exit()
try:
	import gtk
	import gtk.glade
except Exception, e:
	print "error al importar gtk o gtkglade"
	sys.exit()

class calendar:
	"""Lee la fecha de un widget de calendario y muestra sus
	valores en cajas de texto"""
	#Variables globales
	txtDia=None #None es un null en python
	txtMes=None
	txtAnho=None

	def __init__(self):
		'''Constructor, carga el archivo de glade e inicializa
		los widgets'''

		print "Info: Importado Correcto"
		self.gladefile="gui/gui.glade"
		self.wTree=gtk.glade.XML(self.gladefile)
		self.window=self.wTree.get_widget("main")
		self.calendario=self.wTree.get_widget("calendario")
		self.txtDia=self.wTree.get_widget("txtDia")
		self.txtMes=self.wTree.get_widget("txtMes")
		self.txtAnho=self.wTree.get_widget("txtAnho")

		#Creamos un diccionario de listeners o "Manejadores"
		dic={"on_calendario_day_selected":self.diaChanged,"on_main_destroy":self.end}
		#Conectamos los listeners con los widgets
		self.wTree.signal_autoconnect(dic)
		#Mostramos la ventana
		self.window.show()

	def end(self,widget):
		gtk.main_quit()

	def diaChanged(self,widget):
		'''Metodo escucha para cada cambio de dia en el calendario'''
		fecha= widget.get_date()
		self.txtDia.set_text(str(fecha[2]))
		self.txtMes.set_text(str(fecha[1]))
		self.txtAnho.set_text(str(fecha[0]))

if __name__ == '__main__':
	'''Metodo disparado al cargar el script'''
	test=calendar()
	gtk.main()

De forma muy rapida explico: La primer parte:

import sys
try:
	import pygtk
	pygtk.require("2.0")
except Exception, e:
	print "error al importar pygtk"
	sys.exit()
try:
	import gtk
	import gtk.glade
except Exception, e:
	print "error al importar gtk o gtkglade"
	sys.exit()

Importa las librerias necesarias, si no estan instaladas o no las encuentra imprime un mensaje de error y sale del programa.

def __init__(self):
		'''Constructor, carga el archivo de glade e inicializa
		los widgets'''

Lo que está en este bloque es muy simple, leemos el archivo generado en glade y cargamos los widgets para obtener y manipular sus parametros y eventos.

def end(self,widget):
		gtk.main_quit()

	def diaChanged(self,widget):
		'''Metodo escucha para cada cambio de dia en el calendario'''

Éstos dos metodos son los oyentes, el primero termina el programa al cerrarse la ventana principal, si no especificamos ésto se cerrará la ventana pero el programa seguira en ejecucion y eso definitivamente no lo queremos porque terminaremos con decenas de procesos de python haciendo nada. Y por ultimo nuestro “main” o su equivalente en Python:

if __name__ == '__main__'

Por supuesto esta es una (como decimos) mega embarrada de como hacerlo y es por eso que en el proximo post profundizaré más en el tema.

Anuncios

Cuentanos tu reaccion

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s