2015-03-04 2 views
-3

Это мой код: http://pastebin.com/eN6xZ40PPython Гуй (Tkinter) procces

Я получил две ошибки, которые я не могу понять:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\python26\lib\lib-tk\Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "D:/Users/user-pc/Desktop/mail/someTK.py", line 32, in sendMail 
    msg = MIMEText(output['Body']) 
KeyError: 'Body' 
+4

1. Пожалуйста, предоставьте [минимальный пример] (http://stackoverflow.com/help/mcve) ** в вопросе **. 2. * Это только одна ошибка! * – jonrsharpe

ответ

0

Вам необходимо правильно управлять интерфейсом.

Различные поля электронной почты заполняются в функции fetch(), которая вызывается при нажатии клавиши <Return>, а не при нажатии кнопки Send. Если вы заполните поля формы, нажмите <Return>, а затем нажмите Send, и он попытается отправить электронное письмо.

Я не знаю, если это лучший путь, но это может быть сделано, чтобы работать, добавляя ту же привязку, как для <Return> к Send кнопки:

b1 = Button(root, text='Send', command=sendMail) 
    b1.bind("<Button-1>", (lambda event, e=ents: fetch(e))) 

Альтернативой было бы назвать fetch() в пределах sendMail(), прежде чем конструировать сообщение электронной почты.

Еще лучше улучшить интерфейс, чтобы отключить кнопку Send до тех пор, пока не будут предоставлены все обязательные поля, но это выходит за рамки этого вопроса.

+0

благодарит за вашу помощь, Должен ли я удалить строку привязки? Что мне нужно делать? – pythonMan

+0

На самом деле, я ошибся в создании экземпляра SMTP - 'smtplib.SMTP ('smtp.gmail.com:587)' допустимо. Я отредактировал ответ соответствующим образом. – mhawke

+0

@pythonMan: обновленный ответ с предлагаемым исправлением. – mhawke