Вы находитесь на странице: 1из 11

TUTORIAL DE VISUALWX Y PYTHON

Realmente puedes hacer con este tutorial lo que tu conciencia te indique que debes hacer. No hay problema. Manuel Enrique Gonzlez Ramrez. Anserma Caldas COLOMBIA

En esta leccin crearemos un pequeo form que nos pedir el nombre y la fecha de nacimiento y con estos datos calcularemos la edad y mostraremos un mensaje al pulsar un botn. Utilizaremos los controles Edit text y Date Picker; igualmente haremos algunos clculos, repasaremos algo de las lecciones anteriores.

LECCIN 3 Para esta leccin crearemos una carpeta denominada nombre, igualmente crearemos un nuevo proyecto (File New Project), seleccionamos WX_SDI_Python y guardamos el proyecto con el nombre de leccion3 dentro de la carpeta nombre. Cargamos el frame MyFrame haciendo doble clic sobre ste. Cambiamos su color de fondo, yo le he puesto un amarillo crema y como ttulo de ventana le colocamos Mi leccin No. 3. Hasta el momento todo es repaso de la leccin No. 2. Antes de continuar, si deseamos que todos los controles que ubiquemos en el form tengan el mismo tipo y tamao de fuente entonces procedemos de la siguiente manera:

Clic en cualquier parte del form

Luego, en la ficha propiedades buscas Font


Doble clic y la cambias por tu fuente preferida y el tamao que deseas.

Yo he seleccionado Arial,11. Colocamos en el form un Static Text y en la propiedad Name colocamos st_nombre y en la propiedad Text escribimos Nombre.

De la ficha Components hacemos doble clic en Edit Text, luego en la ficha propiedades y teniendo seleccionado el control que acabamos de ubicar en el form, cambiamos la propiedad Name por txt_nombre. Ampliamos un poco el control hacia la derecha para que nos quepa un nombre completo. Ahora ubicamos otra etiqueta de texto (Static Text) que diga Fecha de nacimiento. Para obtener algo como esto:

Ahora de la ficha Components buscamos el control denominado Date Picker, lo ubicamos en el form y le cambiamos la propiedad name a dp_fecnac (recuerda ponerle nombre a los controles que tengan referencia con su funcin o con su contenido, yo acostumbro a colocar las primeras letras que me indican qu tipo de control es separadas por un guin bajo del nombre que me identifica qu informacin contendr o qu accin ejecutar). Si el control una vez ubicado en el form no te corre con el mouse, selecciona el control de la ficha Project y veras como ahora s puedes mover el control dentro del form. Debajo de estos controles ubica un Static Text al que slo le vas a cambiar la propiedad Name:st_mensaje Por ltimo ubica un botn (Button) cambia sus propiedades Name: bt_calcular y Text:Calcular Edad Debes tener en pantalla algo parecido a esto:

Ahora procederemos a la programacin. Lo primero que haremos ser que cuando el usuario acceda a nuestro programa el cursor se encuentre en el cuadro de texto Nombre, o sea, activaremos el foco inicial all. Esta es bien fcil. Haz clic en el txt_nombre o en el cuadro de texto que tienes frente a la palabra Nombre del form; luego en la ficha propiedades busca la propiedad Focus y cambiala de False a True haciendo doble clic sobre la palabra False. Y eso es todo. Lo segundo es hacer que cuando el usuario presione la tecla enter el foco cambie al date picker y el nombre ingresado quede todo en maysculas. Cmo lo hacemos? Seleccionemos el cuadro de texto denominado txt_nombre, nos cambiamos a la ficha Events y activamos Base wxWidgets Events o como quien dice, hacemos clic en el botn B. Activamos el evento EVT_KEY_DOWN (cuando se presione un tecla, normalmente se configura para que sea cuando se presione enter) y le asignamos un nombre a este

evento, yo le he puesto va_fecha.

Hacemos clic en la ficha Python (la del centro debajo del form) y buscamos el evento que acabamos de asignar denominado va_fecha all digitamos lo siguiente:
def va_fecha(self,event): #init function #add your code here n = self.txt_nombre.GetValue().upper() key = event.GetKeyCode() if (key==9 or key==13 or key==wx.WXK_NUMPAD_ENTER): if n<>'': self.txt_nombre.SetLabel(n) self.dp_fecnac.SetFocus() else: dlg = wx.MessageDialog(self,"Debe ingresar el nombre","Faltan Datos",wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() self.txt_nombre.SetFocus() event.Skip() return #end function

Qu es lo que acabamos de escribir? En la lnea 64 utilizamos un variable denominada n que nos recoge el valor del txt_nombre mediante el GetValue(), al final se observa upper(), esta palabra reservada es la que permite pasar el texto escrito a MAYSCULA. En la lnea 65 le asignamos a la variable key el evento GetKeyCode() que recoge el cdigo -creo que ascii- de la tecla presionada. En la lnea 67 lo que hacemos es decirle a Python que si es presionada la tecla TAB (9) o la tecla ENTER (13) o la tecla ENTER del teclado numrico (wx.WXK_NUMPAD_ENTER) evale si la variable n se encuentra vaca n<>''. Si la lnea 68 es verdadera entonces, mediante la lnea 69 cambiamos el texto a mayscula y se cambia el foco al date picker dp_fecnac lnea 70. Si no se cumple la condicin de la lnea 68 entonces se muestra un mensaje de error y el foco vuelve a quedar en el txt_nombre. Ahora vamos a programar el botn para que cuando ste sea pulsado nos calcule la edad del usuario. Hacemos clic en el botn y nos pasamos a la ficha Events.

Seleccionamos Component Events o como quien dice, hacemos clic en el botn E. Activamos el evento EVT_BUTTON (evento de botn) y le asignamos un nombre a la funcin, yo le he puesto calcular. Clic en la pestaa Python y antes de buscar el nombre de la funcin que acabamos de configurar, debemos importar el mdulo que maneja los formatos de tiempo y fecha: En las primeras lneas debes entonces escribir:
import datetime

Justo en ese espacio, para que al ejecutar el programa no se te desaparezca. Ahora s buscamos nuestra funcin calcular y all vamos a escribir:
def calcular(self,event): #init function #add your code here n = self.txt_nombre.GetValue() fnace = self.dp_fecnac.GetValue().Format('%Y/%m/%d') anio = fnace[:4] mes = fnace[5:7] dia = fnace[8:10] nacim=datetime.date(int(anio),int(mes),int(dia)) dhoy=datetime.date.today() edad=dhoy.year-nacim.year if nacim.replace(year=dhoy.year)<dhoy: edad -=1 e = edad+1 x = str(e) self.st_mensaje.SetLabel(u'%s tu edad es de: %s aos' % (n,x)) return #end function

Pero qu rayos es todo este cuento!!! En la lnea 52 tenemos una variable n que nos recoge el valor del txt_nombre En la lnea 53 tenemos una variable fnace que nos almacena la fecha ingresada (se supone que la de nacimiento) seguida por Format('%Y/%m/%d') que hace que la fecha ingresada quede con el formato de 4 dgitos en la fecha, dos en el mes y dos en el da, ejemplo: 1976/05/26, bueno puedes aprender ms con la ayuda de Python. En las lneas del 55 al 57 lo que estamos haciendo es almacenando parte de esa fecha en las variables anio, mes, da; me explico con el siguiente ejemplo: Seleccione la fecha 1976/05/26; observa que anio tiene [:4] quiere decir que toma los valores que van desde el ndice 0 (inclusive) hasta el 3 dgito, o sea, 1976; mes tiene [5:7] va desde el ndice 5 (inclusive) hasta el 6 y por ltimo tenemos da que va desde [8:10] aqu hay que agregar un nmero ms a la cadena (10) ya que el operador de corte : ejecuta va hasta el j-1. Para que tengas un poco ms claro este concepto te recomiendo el tutorial Introduccin a la programacin con python de Andrs Marzal e Isabel Gracia, pg. 167 (Subcadenas: operador de corte). Excelente tutorial, lo que no recuerdo es de dnde me lo baje :( As ya recorde http://marmota.act.uji.es/MTP) Bueno, continuo tratando de explicar (es que a veces yo no me entiendo pero s s lo que digo). En la lnea 59 utilizamos la variable nacim para almacenar el formato de fecha del

datetime, razn por la cual en las primeras lneas tenamos que importar dicha clase, para poder utilizar sus propiedades ms abajo. Con la variable dhoy ubicada en la lnea 60, obtenemos, perdn almacenamos la fecha de hoy en el formato yyyy-mm-dd o yyyy/mm/dd (realmente el separador o / al final no es que importe mucho). En la lnea 62 con la variable edad lo que estamos haciendo realmente es restar el ao actual con el ao de la variable nacim o sea, el que ingresamos de nuestra fecha de nacimiento. En la lnea 63 hacemos un reemplazo de variable y una comparacin, es para quitarle una unidad (lnea 64) a la edad si el ao de la edad dada es menor al ao actual, sino (lnea 65) le agrega una unidad. En la lnea 66 utilizamos una nueva variable x que convierte a la variable e en una cadena de texto para poderla ubicar dentro del st_mensaje. Por ltimo llega la lnea 67 que mostrar el mensaje una vez se cumplan todas anteriores condiciones. Al ejecutar el programa tenemos algo parecido a esto:

Bueno, eso es todo por hoy. Mucha suerte a tod@s.