Duda sobre wxpython

Carlos Herrera Polo carlos.herrerapolo en gmail.com
Lun Jul 20 20:27:23 CEST 2009


Mi codigo antiguo era un programa con varias funciones y comenzaba asi:

def main():
    while 1 == 1:
        fn_borra_directorio()
        gi_total_msg = 0
        process_server(gs_srv_imap, gs_usr_imap, gs_pass_imap)
        print 'Procesando : ' + str (gs_email_remitente_smtp)

        # Pausa de 30 segundos
        time.sleep(30)


La funcion process_server invoca a otras funciones mas, utilizo solamente
programacion estructurada, el programita hace lo que necesito.

Luego, diseñe un formulario :

class MyFrame_principal ( wx.Frame ):

y ahora dentro de ese formulario cree un evento timer que hace lo que hacia
el codigo anterior, pero dentro de una funcion ( o metodo) de la clase
MyFrame_principal....

El tema esta que dentro de ese evento llamo a la funcion "process_server",
la cual llama a varias funciones mas y en una de ellas tengo el print que
necesito cambiar.... ahi es donde necesito hacer referencia a las etiquetas
para ir cambiando atributos.


def OnTimer(self, event):

        fn_borra_directorio()
        gi_total_msg = 0
        global gi_total_procesos
        gi_total_procesos = gi_total_procesos + 1
        process_server(gs_srv_imap, gs_usr_imap, gs_pass_imap)
        self.m_staticText5.SetLabel(str (gi_total_procesos) + ' | Procesando
: ' + str (gs_email_remitente_smtp) + ' | '+fn_today.fn_today())



Encontre esto :
http://osdir.com/ml/org.user-groups.python.argentina/2007-05/msg00407.html

Pero no me funciona..... :s

Gracias Eduardo por tu tiempo
El 20 de julio de 2009 13:21, Eduardo Matus <ematus en gmail.com> escribió:

> tu codigo antiguo es una clase o solo funciones??
> form = MyFrame_principal(None)
> revisaCorreos = RevisaCorreos(form)
>
> en el constructor de la clase revisaCorreos deberia ser algo así
> def __init__(self, formulario):
>        self.formulario = formulario
>
> def timerCallBack(self):
>       self.formulario.cambiaTexto("algo")
>
>
> que tipo de timer estas usando??
>
>
>
> 2009/7/20 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>
>
> > Gracias Eduardo por tu pronta respuesta.
> >
> > Entiendo lo de la funcion que puedo incorportala dentro de la clase, eso
> es
> > sencillo.
> >
> > Lo que no se aun es como hago lo segundo, es decir pasar la instancia del
> > formulario...
> >
> > Yo declare mi ventana principal de esta forma :
> >
> > class MyFrame_principal ( wx.Frame ):
> >
> >
> > y en el main() del programa la invoque asi :
> >
> > app = wx.PySimpleApp()
> > frame=MyFrame_principal(None)
> > app.MainLoop()
> >
> > Como tendria que hacer para instanciar la clase desde mi funcion ?
> >
> > Mil gracias de nuevo Eduardo por tu apoyo. Espero comprendas que recien
> me
> > estoy iniciando en esto de Python ..
> >
> > Saludos
> >
> > El 20 de julio de 2009 12:52, Eduardo Matus <ematus en gmail.com> escribió:
> >
> > > crea una funcion en la clase donde esta el statictext para cambiar el
> > texto
> > > def cambiaTexto(self, texto):
> > >       self.staticText5.SetLabel(unicode(texto))
> > >
> > > en tu codigo original le podrias pasar la instancia del formulario y
> asi
> > > llamar a la funcion...
> > > esto es si no quieres hacer muchas modificaciones a tu codigo original.
> > >
> > > 2009/7/20 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>
> > >
> > > > Estimados:
> > > >
> > > > Hace unos meses desarrolle un pequeño proceso en python el cual
> > procesaba
> > > > correos electronicos con IMAP cada cierto lapso de tiempo y respondia
> > al
> > > > remitente con unos archivos adjuntos, deje el programa listo y al ser
> > un
> > > > proceso no necesitaba una GUI. El codigo principalmente estaba
> > > estructurado
> > > > con funciones de python.
> > > >
> > > > Como me interese en wxPython decidi hacerlo un poco mas "vistoso" y
> > > comence
> > > > a desarrollar mi version GUI ..
> > > > Entonces, planeo utilizar el codigo que elabore anteriormente ya que
> me
> > > > funciona bien... Lo que quiero hacer es que ahora los mensajes de
> > alerta
> > > > figuren dentro de etiquetas de la ventana.
> > > >
> > > > Mi gran duda es :
> > > >
> > > > Dentro de la clase de la ventana principal tengo los "static text",
> eso
> > > ya
> > > > funciona.. proceso con el evento timer la lectura del buzon IMAP y
> > > funciona
> > > > bien..
> > > >
> > > > Mi problema es que para reutilizar mi codigo anterior, tengo que
> hacer
> > > que
> > > > desde las funciones cambiar lo que hacia con PRINT y cambiarlo por
> > > > SetLabel,
> > > > por ejemplo :
> > > >
> > > >            # print 'Procesando adjuntos...' (Asi era antes)
> > > >
> > > >            MyFrame_principal.m_staticText5.SetLabel('Procesando
> > > > adjuntos...')  (Asi lo quiero dejar)
> > > >
> > > > Mi problema esta en que no se como hacer referencia dentro de una
> > funcion
> > > > al
> > > > statictext, ya que la funcion no esta dentro de ninguna clase, he
> leido
> > > los
> > > > manuales y no encuentro como hacer esa referencia, he visto que se
> > puede
> > > > invocar atributos de controles desde distintas ventanas, pero no he
> > > > encontrado como hacer que desde una funcion se cambie el atributo,
> > > >
> > > > Si alguien me puede orientar en este tema les estare muy agradecidos.
> > > >
> > > > Saludos
> > > > _______________________________________________
> > > > Lista de correo Python-es
> > > > http://listas.aditel.org/listinfo/python-es
> > > > FAQ: http://listas.aditel.org/faqpyes
> > > >
> > > _______________________________________________
> > > Lista de correo Python-es
> > > http://listas.aditel.org/listinfo/python-es
> > > FAQ: http://listas.aditel.org/faqpyes
> > >
> > _______________________________________________
> > Lista de correo Python-es
> > http://listas.aditel.org/listinfo/python-es
> > FAQ: http://listas.aditel.org/faqpyes
> >
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es