IDLE 2.7.11/12 “NameError: global name 'Toplevel' is not defined”

不想你离开。 提交于 2019-12-20 06:37:33

问题


I ran APT-GET update on a Debian based OS on Oracle VB. While it was running I messed around with some python code in IDLE 2.7.12 (I opened it with a terminal). After it finished updating, I tried saving my code. In the terminal that I opened IDLE with I got an error. It says this:

root@kali:~# idle

Idle opens, I load my code, I edit my code, then I click [FILE] [SAVE]

This happens

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

I have already tried restarting the VB, and I've uninstalled, autocleaned, then re-installed IDLE with no luck.


回答1:


The problem is a bug in the updated version of IDLE. Add the following near the top of .../Lib/idlelib/IOBinding.py, for instance before import tkFileDialog.

from Tkinter import *

The NameError occured in a function that displays a warning with the following message:

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

where <enc> will be an encoding such as utf-8.

It occurs to me that the message might be more helpful for beginners if it pointed to the Python Language Reference, Section 2.1.4., Encoding declarations

This bug is 2.x specific because in Python3, utf-8 is the default used in the absence of an encoding declaration.




回答2:


open IDLE.
Options
Configure IDLE
General
set 'Default Source Encoding' : UTF-8

I'm running Python 2.7.12 on Windows 10 and also Ubuntu 16.04 this solved my save/crash IDLE issue on both OS's .

Why do I get the feeling they are trying to throw us off Python 2 to 3 ?! jk.



来源:https://stackoverflow.com/questions/40523932/idle-2-7-11-12-nameerror-global-name-toplevel-is-not-defined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!