我的输入框总是返回PY_VAR1值!!虽然我正在使用.get函数

时间:2014-01-19 10:43:51

标签: python tkinter

请看看我的代码,它非常简单我需要从输入框中取值并在我的程序中使用它,当按下添加按钮我打印它时,它会不断给我这个值PY_VAR1?!!想知道我做错了什么!

这是我的问题My code returns an empty value for the entry box

的t runnable代码的链接
from Tkinter import *
    root = Tk()
    content = StringVar()
    text = StringVar()
    class addcase:
        def mains(self):
            master = Tk()
            master.wm_title("Add")
            bz = Button(master,text="add",command=self.add)
            bz.pack()
            l = Label(master,text="ok")
            l.pack()
            e = Entry(master,textvariable=content)
            e.pack()
            e.focus_set()
            content.set("default value")
            text = content.get()
            master.mainloop()
        def add(me):
                print content.get()
                print text

1 个答案:

答案 0 :(得分:1)

由于你实际上没有给我们一个可运行的例子,这实际上只是一个猜测,但是......

当您修复代码以使其实际运行时,然后单击按钮,它会打印出来:

default value
PY_VAR1

如果你查看代码,它会这样做:

    def add(me):
            print content.get()
            print text

第一行调用get StringVar,您已使用contents.set('default value')初始化,并且从未再次修改,因此当然打印出default value。据我所知,你对此并不感到惊讶。

第二行不会在名为StringVar的{​​{1}}上调用任何内容。只需text print,而不是在其上调用StringVar并打印结果,会导致它打印变量的Tk名称。您还在get()中定义了同名的局部变量这一事实无关紧要。据我所知,这个 让你感到惊讶。但你不应该。 addcase函数无法在完全不相关的函数中看到您创建的任何局部变量。

如果希望在同一个类实例的不同方法之间共享一个值,请将它们存储在实例属性中,而不是本地变量中。

但是,更简单地说,如果你只是避免在完全独立的范围内为完全不同的变量重复使用相同的名称,你可能会避免让自己感到困惑,而且显而易见的是。