Código tracerback:
Ver original
Traceback (most recent call last): File "loginemail.py", line 36, in OnAceptar vnt=SenderMessage(value, None) File "/home/victor/concurso/wxtest/sendmessage.py", line 26, in __init__ self.Bind(wx.EVT_BUTTON, self.Salir) 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
#!/usr/bin/env python import wx #from loginemail import CE class SenderMessage(wx.Frame): def __init__(self, logon, parent=None): import pdb; pdb.set_trace() #pos=(x, y) if logon==None: dialog=wx.MessageDialog(self, u'Error Fatal la aplicacion sera cerrada', u'Informacion', wx.OK | wx.ICON_ERROR) dialog.Destroy() self.Destroy() else: self.emailLogon=logon wx.Frame.__init__(self, parent, wx.NewId(), title='Send A message', size=(300,300), pos=(250,300)) wx.Panel(self, -1) lBienvenido = wx.StaticText(self,-1,u'Bienvenido', pos=(90,-1)) lDe=wx.StaticText(self,-1, u'De', pos=(90, 30)) self.De=wx.TextCtrl(self, -1, '', pos = (120 , 30), size = (150,-1)) lPara = wx.StaticText(self,-1, u'Para', pos=(90, 80)) self.Para = wx.TextCtrl(self, -1, '', pos = (120 , 80), size = (150,-1)) lcorreo=wx.StaticText(self,-1, u'Correo', pos=(90, 110)) self.correo=wx.TextCtrl(self, -1, '', pos = (110 ,140), size = (150,130), style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB|wx.TE_MULTILINE) boton_enviar= wx.Button(self, -1, u'enviar', pos=(110,100)) boton_salir= wx.Button(self, -1, u'Salir', pos=(130, 100)) #self.Bind(wx.EVT_BUTTON, self.Enviar) self.Bind(wx.EVT_BUTTON, self.Salir) self.Layout() #self.Show() return None def Enviar(self, evt): De=self.De.GetValue() basicPara=self.Para.GetValue() Para=basicPara.split() texto=self.correo.GetValue() self.emailLogon.SendMail(De, Para, texto) dialog=wx.MessageDialog(self, u'Su mensaje ha sido enviado', u'Informacion', wx.OK | wx.ICON_INFORMATION) return True def Salir(self, evt): dialog=wx.MessageDialog(self, u'Gracias por usarme', u'Informacion', wx.OK | wx.ICON_INFORMATION) dialog.ShowModal() dialog.Destroy() self.emailLogon.CloseServer() self.vntReferente.Show() self.Destroy() return if __name__=='__main__': app=wx.App(0) ventana=SenderMessage(None, None) ventana.Show() 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
#!/usr/bin/env python import wx from moduleemail import ConnectEmail from sendmessage import SenderMessage class Login(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, wx.NewId(),title='Inicio Sesion', size=(300,200), pos=(250,250)) #self.ventana #import pdb; pdb.set_trace() #AlmacenCajasTexto=wx.BoxSizer(wx.VERTICAL) self.lemail=wx.StaticText(self, -1, 'Email', pos=(50,10)) self.contrasena=wx.TextCtrl(self, -1, '', pos = (130 , 50), size = (150,-1),style=wx.TE_PASSWORD) self.lpass=wx.StaticText(self, -1,'password', pos=(50, 50)) self.email=wx.TextCtrl(self, -1, '', pos = (130 ,00), size = (150,-1)) wx.InitAllImageHandlers() boton_aceptar= wx.Button(self, -1, u'Aceptar', pos=(50,100)) boton_salir= wx.Button(self, -1, u'Salir', pos=(150, 100)) self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar) self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_salir) #self.Show() self.Layout() return def OnAceptar(self, evt): email=self.email.GetValue() contrasena=self.contrasena.GetValue() self.CE=ConnectEmail() MSG=self.CE.SingEmail(email, contrasena) if MSG=='Sesion Iniciada': dialog=wx.MessageDialog(self, MSG, u'Informacion', wx.OK | wx.ICON_INFORMATION) self.Hide() dialog.ShowModal() value=self.CE #import pdb; pdb.set_trace() vnt=SenderMessage(value, None) vnt.vntReferente=self vnt.vntReferente.Hide() elif MSG=='Error de Conexion: nombre de usuario y password no aceptado': dialog=wx.MessageDialog(self, MSG, u'Informacion', wx.OK | wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy() self.Close() contrasena='' email='' return def OnSalir(self, evt): self.Close() self.Destroy() return #if __name__=='__main__': app=wx.App(False) aplicacion=Login(None) aplicacion.Show() app.MainLoop()
Este por su parte se vale de otro modulo para manejar smtplib que es el que sigue:
Código Python:
Ver original
#!/usr/bin/env python import smtplib class ConnectEmail: def __init__(self): self.email='' self.password='' self.mensaje='' self.AdressServer='smtp.gmail.com:587' self.server='' self.response='' return def SingEmail(self, email, password): self.server=smtplib.SMTP(self.AdressServer) self.server.starttls() self.email=email #import pdb; pdb.set_trace() try: self.server.login(email, password) except smtplib.SMTPAuthenticationError: print "Error de conexion: nombre de usuario y password no aceptado" self.CloseServer() return "Error de Conexion: nombre de usuario y password no aceptado" return 'Sesion Iniciada' def SendMail(self, De, Para, Texto): import pdb;pdb.set_trace() texto=""" %s""" % Texto self.server.sendmail(De,Para,texto) return True def CloseServer(self): self.server.quit() return True def returnUserEmail(self): useremail=self.email return useremail
Bueno, espero que me puedan dar alguna ayuda con este bendito programita y agradezco su ayuda.