IDLE 2.7.11 / 12“NameError:全局名称'Toplevel'未定义”

时间:2016-11-10 09:23:05

标签: python-2.7 updates python-idle

我在Oracle VB上基于Debian的操作系统上运行了APT-GET更新。在它运行时,我在IDLE 2.7.12中使用了一些python代码(我用终端打开它)。完成更新后,我尝试保存我的代码。在我打开IDLE的终端中,我收到了一个错误。它说:

  

root @ kali:〜#idle

空闲打开,我加载代码,编辑代码,然后单击[文件] [保存]

发生这种情况

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1545, in __call__
    return self.func(*args)
  File "/usr/lib/python2.7/idlelib/ScriptBinding.py", line 140, in run_module_event
    filename = self.getfilename()
  File "/usr/lib/python2.7/idlelib/ScriptBinding.py", line 205, in getfilename
    self.editwin.io.save(None)
  File "/usr/lib/python2.7/idlelib/IOBinding.py", line 345, in save
    if self.writefile(self.filename):
  File "/usr/lib/python2.7/idlelib/IOBinding.py", line 378, in writefile
    chars = self.encode(self.text.get("1.0", "end-1c"))
  File "/usr/lib/python2.7/idlelib/IOBinding.py", line 450, in encode
    dialog = EncodingMessage(self.editwin.top, enc)
  File "/usr/lib/python2.7/idlelib/IOBinding.py", line 76, in __init__
    self.root = top = Toplevel(master)
NameError: global name 'Toplevel' is not defined

Picture of my terminal with the error

我已经尝试重新启动VB,我已经卸载,自动清除,然后重新安装IDLE而没有运气。

2 个答案:

答案 0 :(得分:0)

问题是IDLE更新版本中的错误。在.../Lib/idlelib/IOBinding.py的顶部附近添加以下内容,例如在import tkFileDialog之前。

from Tkinter import *

NameError出现在一个显示警告的函数中,其中包含以下消息:

Non-ASCII found, yet no encoding declared. Add a line like
-*- coding: <enc> -*-
Choose OK to save this file as <enc>
Edit your general options to silence this warning

其中<enc>将是utf-8等编码。

如果它指向Python语言参考,第2.1.4节,编码声明

,那么该消息可能对初学者更有帮助。

此错误是2.x特定的,因为在Python3中,utf-8是缺少编码声明时使用的默认值。

答案 1 :(得分:0)

打开IDLE。
选项
配置IDLE
一般
设置&#39;默认源编码&#39; :UTF-8

我在Windows 10和Ubuntu 16.04上运行Python 2.7.12,这解决了我在两个操作系统上的保存/崩溃IDLE问题。

为什么我会觉得他们试图让我们从Python 2到3? JK。