为什么已导入import tkinter as tk,省略from tkinter import *会报错?
问题原因
END是tkinter模块内置的字符串常量,只有执行from tkinter import *时才会将该常量导入当前全局命名空间;当你省略这句导入语句,仅使用import tkinter as tk时,当前命名空间不存在直接可用的END变量,因此触发NameError。
解决方法
- 方案1(最推荐,无命名空间污染):给
END添加tk.前缀,直接通过导入的tkinter别名调用常量,修改set_text方法内的代码即可:
def set_text(self,parent,text): self.e.delete(0, tk.END) self.e.insert(0, text)
修改后可直接删除from tkinter import *语句,不影响运行。
- 方案2:单独导入需要的
END常量,在导入区域添加:
from tkinter import END
- 方案3:直接使用
END对应的原生字符串值'end',无需额外导入:
self.e.delete(0, 'end')
修正后可正常运行的完整代码
import tkinter as tk from tkinter import ttk class HelperFun(): def set_text(self,parent,text): self.e.delete(0, tk.END) self.e.insert(0,text) return def __init__(self,parent): self.parent=parent self.e = tk.Entry(self.parent,width=10) self.e.pack() self.b1 = tk.Button(self.parent,text="animal", command=lambda:self.set_text(self.parent,"animal")) self.b1.pack() root=tk.Tk() HelperFun(root) root.mainloop()
内容的提问来源于stack exchange,提问作者Andy Papadopoulos
相关产品推荐
相关产品推荐

