Tkinter Entry和.get()的问题

时间:2012-11-11 22:06:08

标签: python tkinter

我的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)

2 个答案:

答案 0 :(得分:3)

正如RocketDonkey指出的那样,你的回溯与你发布的代码不符。

您编写的代码将生成如下跟踪:

AttributeError: 'NoneType' object has no attribute 'get'

根本问题是grid返回None。这意味着属性ab将为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行检查,则表明aself没有前缀,这意味着您尝试引用a而不是引用实例的属性a。它本身就没有定义。尝试在第146行的self前面添加a,然后查看问题是否仍然存在。