2009-11-12 3 views
1

Я запускаю приложение, используя скрученный и tkinter, который отправляет результат на сервер, ждет, пока сервер вернет подтверждение, а затем выйдет. Таким образом, функция Я использую для выхода заключается в следующем:Сбой программы Twisted/tkinter при выходе

def term(): 
    '''To end the program''' 
    reactor.stop() 
    root.quit() 
    root.destroy() 

Это затем устанавливается на заводе-изготовителе и вызывается в функции DataReceived протокола. Я бегу, и программа работает нормально, и даже посылает необходимые данные и закрывается, но это также дает мне следующее сообщение об ошибке:

Unhandled error in Deferred: 
Traceback (most recent call last): 
    File "D:\Python25\Lib\site-packages\twisted\internet\base.py", line 1128, in run 
    self.mainLoop() 
    File "D:\Python25\Lib\site-packages\twisted\internet\base.py", line 1137, in mainLoop 
    self.runUntilCurrent() 
    File "D:\Python25\Lib\site-packages\twisted\internet\base.py", line 757, in runUntilCurrent 
    call.func(*call.args, **call.kw) 
    File "D:\Python25\Lib\site-packages\twisted\internet\task.py", line 114, in __call__ 
    d = defer.maybeDeferred(self.f, *self.a, **self.kw) 
--- <exception caught here> --- 
    File "D:\Python25\Lib\site-packages\twisted\internet\defer.py", line 106, in maybeDeferred 
    result = f(*args, **kw) 
    File "D:\Python25\lib\lib-tk\Tkinter.py", line 917, in update 
    self.tk.call('update') 
_tkinter.TclError: can't invoke "update" command: application has been destroyed 

Кто-нибудь знает почему?

ответ

1

Вам нужно позвонить только reactor.stop, чтобы выйти: звонки root.quit() и root.destroy() являются излишними. Рассмотрим этот короткий пример, который запускает Twisted и Tk в течение трех секунд, а затем выходит:

import Tkinter 
from twisted.internet import tksupport 

root = Tkinter.Tk() 
tksupport.install(root) 

from twisted.internet import reactor 
reactor.callLater(3, reactor.stop) 
reactor.run() 
+0

Это больше не дает мне проблем, спасибо. – Nikwin

Смежные вопросы