Foros del Web » Programando para Internet » Python »

Aporte (si lo logro terminar) con Error de atributo self.Bind de Wxpython

Estas en el tema de Aporte (si lo logro terminar) con Error de atributo self.Bind de Wxpython en el foro de Python en Foros del Web. Buenas noches a todos. He estado practicando un poco con WxPython y smtplib. Estoy trantando de hacer una pequeña aplicación de escritorio para mandar correos ...
  #1 (permalink)  
Antiguo 16/01/2011, 21:46
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años
Puntos: 0
Aporte (si lo logro terminar) con Error de atributo self.Bind de Wxpython

Buenas noches a todos. He estado practicando un poco con WxPython y smtplib. Estoy trantando de hacer una pequeña aplicación de escritorio para mandar correos electronicos desde cuentas gmail. El problema surge cuando trato de cargar la ventana del mensaje, obtengo el siguiente tracerback:

Código tracerback:
Ver original
  1. Traceback (most recent call last):
  2.   File "loginemail.py", line 36, in OnAceptar
  3.     vnt=SenderMessage(value, None)
  4.   File "/home/victor/concurso/wxtest/sendmessage.py", line 26, in __init__
  5.     self.Bind(wx.EVT_BUTTON, self.Salir)
  6. AttributeError: 'SenderMessage' object has no attribute 'Salir'

El detalle(como dijo cantinflas) es que el método Salir se encuentra declarado en esa misma clase como se puede observar a continuación.

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. import wx
  3. #from loginemail import CE
  4. class SenderMessage(wx.Frame):
  5.     def __init__(self, logon, parent=None):
  6.         import pdb; pdb.set_trace()
  7.         #pos=(x, y)
  8.         if logon==None:
  9.             dialog=wx.MessageDialog(self, u'Error Fatal la aplicacion sera cerrada', u'Informacion', wx.OK | wx.ICON_ERROR)
  10.             dialog.Destroy()
  11.             self.Destroy()
  12.         else:
  13.             self.emailLogon=logon
  14.             wx.Frame.__init__(self, parent, wx.NewId(), title='Send A message', size=(300,300), pos=(250,300))
  15.             wx.Panel(self, -1)
  16.             lBienvenido = wx.StaticText(self,-1,u'Bienvenido', pos=(90,-1))
  17.             lDe=wx.StaticText(self,-1, u'De', pos=(90, 30))
  18.             self.De=wx.TextCtrl(self, -1, '', pos = (120 , 30), size = (150,-1))
  19.             lPara = wx.StaticText(self,-1, u'Para', pos=(90, 80))
  20.             self.Para = wx.TextCtrl(self, -1, '', pos = (120 , 80), size = (150,-1))
  21.             lcorreo=wx.StaticText(self,-1, u'Correo', pos=(90, 110))
  22.             self.correo=wx.TextCtrl(self, -1, '', pos = (110 ,140), size = (150,130), style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB|wx.TE_MULTILINE)
  23.             boton_enviar= wx.Button(self, -1, u'enviar', pos=(110,100))
  24.             boton_salir= wx.Button(self, -1, u'Salir', pos=(130, 100))
  25.             #self.Bind(wx.EVT_BUTTON, self.Enviar)
  26.             self.Bind(wx.EVT_BUTTON, self.Salir)
  27.             self.Layout()
  28.             #self.Show()
  29.         return None
  30.  
  31.         def Enviar(self, evt):
  32.             De=self.De.GetValue()
  33.             basicPara=self.Para.GetValue()
  34.             Para=basicPara.split()
  35.             texto=self.correo.GetValue()
  36.             self.emailLogon.SendMail(De, Para, texto)
  37.             dialog=wx.MessageDialog(self, u'Su mensaje ha sido enviado', u'Informacion', wx.OK | wx.ICON_INFORMATION)
  38.             return True
  39.        
  40.         def Salir(self, evt):
  41.             dialog=wx.MessageDialog(self, u'Gracias por usarme', u'Informacion', wx.OK | wx.ICON_INFORMATION)
  42.             dialog.ShowModal()
  43.             dialog.Destroy()
  44.             self.emailLogon.CloseServer()
  45.             self.vntReferente.Show()
  46.             self.Destroy()
  47.         return
  48. if __name__=='__main__':
  49.     app=wx.App(0)
  50.     ventana=SenderMessage(None, None)
  51.     ventana.Show()
  52.     app.MainLoop()

Por otro lado, la primera frame para ejecutar el Login en el correo electrónico se puede ver a continuación:

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. import wx
  3. from moduleemail import ConnectEmail
  4. from sendmessage import SenderMessage
  5. class Login(wx.Frame):
  6.     def __init__(self, parent):
  7.         wx.Frame.__init__(self, parent, wx.NewId(),title='Inicio Sesion', size=(300,200), pos=(250,250))
  8.         #self.ventana
  9.         #import pdb; pdb.set_trace()
  10.         #AlmacenCajasTexto=wx.BoxSizer(wx.VERTICAL)
  11.         self.lemail=wx.StaticText(self, -1, 'Email', pos=(50,10))
  12.         self.contrasena=wx.TextCtrl(self, -1, '', pos = (130 , 50), size = (150,-1),style=wx.TE_PASSWORD)
  13.         self.lpass=wx.StaticText(self, -1,'password', pos=(50, 50))
  14.         self.email=wx.TextCtrl(self, -1, '', pos = (130 ,00), size = (150,-1))
  15.         wx.InitAllImageHandlers()
  16.         boton_aceptar= wx.Button(self, -1, u'Aceptar', pos=(50,100))
  17.         boton_salir= wx.Button(self, -1, u'Salir', pos=(150, 100))
  18.         self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar)
  19.         self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_salir)
  20.         #self.Show()
  21.        
  22.         self.Layout()
  23.         return
  24.    
  25.     def OnAceptar(self, evt):
  26.         email=self.email.GetValue()
  27.         contrasena=self.contrasena.GetValue()
  28.         self.CE=ConnectEmail()
  29.         MSG=self.CE.SingEmail(email, contrasena)
  30.         if MSG=='Sesion Iniciada':
  31.             dialog=wx.MessageDialog(self, MSG, u'Informacion', wx.OK | wx.ICON_INFORMATION)
  32.             self.Hide()
  33.             dialog.ShowModal()
  34.             value=self.CE
  35.             #import pdb; pdb.set_trace()
  36.             vnt=SenderMessage(value, None)
  37.             vnt.vntReferente=self
  38.             vnt.vntReferente.Hide()
  39.         elif MSG=='Error de Conexion: nombre de usuario y password no aceptado':
  40.             dialog=wx.MessageDialog(self, MSG, u'Informacion', wx.OK | wx.ICON_ERROR)
  41.             dialog.ShowModal()
  42.             dialog.Destroy()
  43.         self.Close()
  44.         contrasena=''
  45.         email=''
  46.        
  47.         return
  48.  
  49.     def OnSalir(self, evt):
  50.         self.Close()
  51.         self.Destroy()
  52.         return
  53.    
  54. #if __name__=='__main__':
  55. app=wx.App(False)
  56. aplicacion=Login(None)
  57. aplicacion.Show()
  58. app.MainLoop()

Este por su parte se vale de otro modulo para manejar smtplib que es el que sigue:

Código Python:
Ver original
  1. #!/usr/bin/env python
  2.  
  3. import smtplib
  4. class ConnectEmail:
  5.     def __init__(self):
  6.         self.email=''
  7.         self.password=''
  8.         self.mensaje=''
  9.         self.AdressServer='smtp.gmail.com:587'
  10.         self.server=''
  11.         self.response=''
  12.         return
  13.  
  14.     def SingEmail(self, email, password):
  15.     self.server=smtplib.SMTP(self.AdressServer)
  16.     self.server.starttls()
  17.     self.email=email
  18.         #import pdb; pdb.set_trace()
  19.     try:
  20.         self.server.login(email, password)
  21.    
  22.     except smtplib.SMTPAuthenticationError:
  23.         print "Error de conexion: nombre de usuario y password no aceptado"
  24.         self.CloseServer()
  25.         return "Error de Conexion: nombre de usuario y password no aceptado"
  26.         return 'Sesion Iniciada'
  27.  
  28.     def SendMail(self, De, Para, Texto):
  29.         import pdb;pdb.set_trace()
  30.     texto="""
  31.      %s""" % Texto
  32.         self.server.sendmail(De,Para,texto)
  33.         return True
  34.  
  35.     def CloseServer(self):
  36.         self.server.quit()
  37.         return True
  38.    
  39.     def returnUserEmail(self):
  40.     useremail=self.email
  41.     return useremail

Bueno, espero que me puedan dar alguna ayuda con este bendito programita y agradezco su ayuda.
  #2 (permalink)  
Antiguo 17/01/2011, 06:16
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Aporte (si lo logro terminar) con Error de atributo self.Bind de Wxpython

Sin haber trabajado nunca con wxPython (siempre con PyQt), creo que el problema está en la forma de llamar a Bind(). Encontré esto: http://wiki.wxpython.org/self.Bind%2...lf.button.Bind

Debería ser self.button_salir.Bind() o self.Bind(, , self.button_salir)

De todas formas, y sin tener un intérprete de Python a mano, no veo claramente el por qué del error.


Saludos.
  #3 (permalink)  
Antiguo 17/01/2011, 08:59
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años
Puntos: 0
Respuesta: Aporte (si lo logro terminar) con Error de atributo self.Bind de Wxpython

Buenos días Alvaro. Si, ese era uno de los errores. Ya funciona. Al menos manda los correos, pero no devuelve los mensajes a partir del wxDialog. Adicional a esto, el método salir se encontraba dentro la identación de __init__ y por eso también fallaba. Cuando lo tenga listo lo posteo o si no puedo con estos errores vuelvo a pedir ayuda. Gracias

Etiquetas: terminar, aportes, atributos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:42.