我最近回到了一个不得不停顿了大约6个月的项目,在重新安装我的操作系统并回到它之后,我发生了各种各样的疯狂事情。我确保安装我之前使用的相同版本(2.6)的python。
它开始给我一个奇怪的tkinter错误,我以前没有遇到过麻烦,程序相对简单,当我退出时留下的2或3个错误,我记录并且与界面无关
即使我删除了有问题的代码部分后,即使出现相同的错误,事情也变得更加怪异了。事实上,回溯指向一条线,该线甚至不存在于它所引用的模块中,例如:当模块只有200行时,第262行。
刚刚为主模块启动一个全新的文件并复制/粘贴后,它终于认识到有问题的代码已经消失,我只是发现错误只是为了发现我在另一个模块中创建的代码的任何更新都没有当我通过shell重新启动程序时显示。 (我没有忘记保存。)当然,在摆弄这个之后,旧的界面错误又回来了,只是在以前工作的不同代码段中。
事实上,如果我恢复到六个月前的文件,程序运行正常。但是,只要我更改了主模块中的任何内容,就会出现界面错误。
这是原始错误:
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:\PyStuff\interface.py", line 202, in dispOne
__main__.top.destroy()
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1938, in destroy
self.tk.call('destroy', self._w)
TclError: can't invoke "destroy" command: application has been destroyed
我猜这里发生了别的事情,而不是我自己糟糕的编程。有人有什么想法吗?
编辑:回想一下,我相信我读过一些关于通过IDLE的shell运行Tkinter程序是个坏主意的事情,至少看来,如果我通过双击启动主模块,TclError就会消失。 .pyc文件。也许我的问题只是加上Chris Atlee和Vlad下面提到的时间戳/ PYTHONPATH问题的组合?
答案 0 :(得分:2)
我发生了类似的事情。我的问题的原因是我的源代码管理软件(hg)将文件的日期设置为过去的日期。因此,python选择使用以前生成的具有较新时间戳的.pyc文件。
解决方法是在测试代码之前删除所有.pyc文件。
答案 1 :(得分:0)
检查你的PYTHON_PATH变量,你可能有一个旧版本的文件。
同时启动python解释器并输入以下命令以检查路径:
import sys
print sys.path
仔细查看输出,确保没有任何旧目录。