我的Tkinter Entry小部件出现问题。 我只是测试出来的东西,并希望我的回调打印出我在Entry self.a中输入的内容。但是我收到了这个错误。
文件“C:\ Python27 \ lib \ lib-tk \ Tkinter.py”,第1410行,调用 return self.func(* args)文件“C:/Users/Andy/testimage.py”,第146行,在get中 print a.get(self)NameError:未定义全局名称'a'
我想知道是否有人可以告诉我我做错了什么。我正确地链接了回调函数,因为如果我让它打印“aasdfasd”,它会在我按下按钮时打印出来。
def clicked_wbbalance(self):
self.top = Toplevel()
self.top.title("LASKJDF...")
Label(self.top, text="Enter low level").grid(row=0, column=0,padx=10)
Label(self.top, text="Enter high level").grid(row=1, column=0,padx=10)
Label(self.top, text="Values must be between 0 to 255").grid(row=3, column=0)
Button(self.top, text="Ok", command=self.get).grid(row=3, column = 1)
self.a =Entry(self.top).grid(row=0, column=1,padx=10)
self.b =Entry(self.top).grid(row=1, column=1,padx=10)
def get(self):
print self.a.get(self)
答案 0 :(得分:3)
正如RocketDonkey指出的那样,你的回溯与你发布的代码不符。
您编写的代码将生成如下跟踪:
AttributeError: 'NoneType' object has no attribute 'get'
根本问题是grid
返回None
。这意味着属性a
和b
将为None
,因为它们会被分配给grid
的调用结果。通过将对象创建和窗口小部件放置在不同的行上来解决此问题:
self.a = Entry(self.top)
self.b = Entry(self.top)
self.a.grid(row=0, column=1,padx=10)
self.b.grid(row=1, column=1,padx=10)
答案 1 :(得分:1)
您的回溯说print a.get(self) NameError: global name 'a' is not defined
,但您发布的代码使用语法print self.a.get(self)
(看似正确)。因此,如果您在第146行检查,则表明a
与self
没有前缀,这意味着您尝试引用a
而不是引用实例的属性a
。它本身就没有定义。尝试在第146行的self
前面添加a
,然后查看问题是否仍然存在。