Simplificar codigo.
Ariel Nardelli
pan_python en yahoo.com.ar
Mie Ago 31 07:05:30 CEST 2005
Hola!
Estoy haciendo un sistema de gestion (wx + python2.3) que tiene muchos
textbox que "levantan" info desde pantalla para grabar todos esos datos
en la base de datos.
Haciendo el programa y tratando de afinar mas el codigo (sobre todo
sacar el codigo repetitivo) veo que una rutina sobre todo se me repite
constantemente solo me cambia 2 lineas pero los demas es siempre el
mismo y entonces se me ocurrio simplificar todo y tratar de usar solo
una rutina.
Les explico con ejemplos, tengo dentro de programa los armados de
pantalla y despues los eventos, aca un ejemplo de 2 eventos...
# p_apno -3- (Razon Social)
EVT_TEXT_ENTER(self, 3,self.evt_get)
EVT_TEXT(self, 3,self.evt_get)
EVT_CHAR(self.tb_apno, self.p_apno_ev_char)
EVT_SET_FOCUS(self.tb_apno,self.evt_skip) # toma foco...
EVT_KILL_FOCUS(self.tb_apno,self.p_apno_ev_df) # deja el foco...
# p_dire -4- (Direccion)
EVT_TEXT_ENTER(self, 4,self.evt_get)
EVT_TEXT(self, 4,self.evt_get)
EVT_CHAR(self.tb_dire, self.p_dire_ev_char)
EVT_SET_FOCUS(self.tb_dire,self.evt_skip) # toma foco...
EVT_KILL_FOCUS(self.tb_dire,self.p_dire_ev_df) # deja el foco...
Toman el evento de apno y dire y ejecutan segun lo que se pulsa las
rutinas, tengo 2 generales que solo sacan el enter y esas cosas que son
la evt_get y el evt_skip que ya lo tengo simplificado en una rutina,
despues tengo las otras dos, una donde asigno variables y verifico que
los datos cargados sea lo que quiero (fechas correctas y demases) que
esta siempre cuando pierdo el foco o sea verifico los datos y asigno
variables siempre que pierdo el foco no antes, por lo tanto esta rutina
siempre va a ser unica por cada texbox pero la que quiero "simplificar"
es la de evt_char, la que va verificando cada tecla pulsada, esto lo
hago porque en algunos casos necesito solo poner numeros o xx cosas
filtradas y uso estas rutinas para filtrar lo que me pulsan del teclado.
Pero una de las cosas por lo que mas la uso es que dependiendo lo que
pulse del teclado fuerzo a pasar al foco, para lograr que pulsando F12
se pase el foco al proximo texbox y pulsando F11 pase el foco al textbox
anterior, ese es el uso fundamental de las dos rutinas, aca las pongo:
# Eventos p_apno -3-
def p_apno_ev_df(self,event): # Deja Foco.
if len(self.tb_apno.GetValue()) <> 0:
self.tm_apno = self.tb_apno.GetValue()
else:
self.tm_apno = ''
event.Skip()
def p_apno_ev_char(self,event):
# 353 es F12 y 352 es F11 (f12 avanza, f11 retrocede)
key = event.GetKeyCode()
if key == 9 or key == 353 or key == 13: # Tecla TAB o F12 Pasa foco.
self.tb_dire.SetFocus()
event.Skip()
if key == 352: # F11 retrocede
self.tb_ncli.SetFocus()
event.Skip()
if key < WXK_SPACE or key == WXK_DELETE or key > 255:
event.Skip()
return
event.Skip()
# Eventos p_dire -4-
def p_dire_ev_df(self,event): # Deja Foco.
if len(self.tb_dire.GetValue()) <> 0:
self.tm_dire = self.tb_dire.GetValue()
else:
self.tm_dire = ''
event.Skip()
def p_dire_ev_char(self,event):
# 353 es F12 y 352 es F11 (f12 avanza, f11 retrocede)
key = event.GetKeyCode()
if key == 9 or key == 353 or key == 13: # Tecla TAB o F12 Pasa foco.
self.tb_copo.SetFocus()
event.Skip()
if key == 352: # F11 retrocede
self.tb_apno.SetFocus()
event.Skip()
if key < WXK_SPACE or key == WXK_DELETE or key > 255:
event.Skip()
return
event.Skip()
Si la miran, lo unico que varia es si pulso tab, F12 o enter paso el
evento al siguiente tb o si pulso F11 paso el foco al tb anterior.
Esta rutina se repite en todos los tb salvo la parte que marca donde ir
segun estas teclas, entonces se me ocurrio simplificar todo y dejar una
sola rutina que lo haga.
Tengo ordenado todo por orden si se fijan al asignar los tb yo no uso -1
sino que pongo un numero asi puedo mantener un orden cuando cargo los
datos y "marcar" el orden con que voy tomando la informacion.
La cosa es, hay alguna manera en esta rutina de "detectar" en que orden
estoy? asi, simplemente cuando tengo que pasar el foco al orden
siguiente seria un setfocus +1 y cuando quiero pasar el orden al tb
anterior seria un setfocus -1 :).
Lo que necesitaria saber es como detectar en que orden estoy y ademas
como hacer para pasar el foco no como lo estoy haciendo aca
(sef.tb.SetFocus()) sino hacerlo directamente sobre el orden algo asi
como self.orden.SetFocus().
Bueno, Agradezco la ayuda y ademas si alguien tiene una mejor idea de
hacer esto y me lo cuenta le estare muy agradecido.
Gracias!
Ariel
--
Saludos
Panflin
NO al limite de adsl de TELECOM
Firma YA el petitorio NACIONAL para que TELECOM no nos estafe con el limite del ADSL, la direccion es:
http://peticionbandaancha.com/
www.reconquista.com.ar
Más información sobre la lista de distribución Python-es