Tkinter回调中的奇怪异常

时间:2012-01-17 16:10:45

标签: python exception callback tkinter

我还在研究我的小Tkinter项目,它是一个简单的日志记录控制台,它将来自串行线的传入文本打印到一个应用了一些着色的Text Widget。

有一个问题是开放的,可在此处找到:Python Tkinter Text Widget with Auto & Custom Scroll

然而,即使没有手动滚动(因此我在使用self.text.yview(END)插入文字后使用self.text.insert(END, str(parsed_line))自动滚动到底部。

该脚本实际上有效,但它偶尔会在Tkinter线程中抛出一些不会让整个应用程序崩溃的“静默”异常:

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 "C:\Python26\lib\lib-tk\Tkinter.py", line 2813, in set
    self.tk.call((self._w, 'set') + args)
TclError: expected floating-point number but got "0.7807017543859649integer but got "end""
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 "C:\Python26\lib\lib-tk\Tkinter.py", line 2813, in set
    self.tk.call((self._w, 'set') + args)
TclError: invalid command name ".15427224integer but got "end""

看起来好像某个方法需要一个整数,将字符串integer but got "end"返回给一个方法,该方法期望一个与错误消息连接起来的浮点数。该字符串中的浮点数看起来就像我附加到文本小部件的滚动条的位置:

(...)       
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
text = Text(wrap=WORD, yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
text.pack(expand=YES, fill=BOTH)
(...)

我觉得在很短的时间内插入很多行会发生这种情况。但由于我只有一个线程与Tkinter交互,因此这不是一个线程问题。

在将str()函数应用于parsed_line中的self.text.insert(END, str(parsed_line))之前,我也遇到了非常随机的错误。

这是一种非常奇怪的行为,我想知道是否有人可以解释这是什么以及如何解决它。

非常感谢!

1 个答案:

答案 0 :(得分:2)

mtTkinter允许使用Tkinter进行多线程处理,您可以在此处获取:

http://tkinter.unpythonic.net/wiki/mtTkinter

只需导入mtTkinter代替Tkinter。这将允许您从多个线程将文本插入到Text小部件中而不会发生冲突。我把它用于我写的一些即时通讯软件,它运行得非常好。