单击时从tkinter按钮获取返回值

时间:2015-04-03 13:36:22

标签: python-3.x tkinter

我需要一个tkinter按钮来为变量赋值,但我无法弄清楚如何。我不能将赋值放在按钮回调函数中,因为它在回调函数中是本地的并且会丢失。如何从主函数中的按钮获取值?

以下是代码:

def newfile():
    def create_file(entry):
        file=open(entry.get(0),'w')
        return file
    chdir(askdirectory())
    name=Tk()
    name.title("Name the File?")
    prompt=Label(name, text="Enter name for new file:")
    prompt.grid(row=0)
    e=Entry(name)
    e.grid(row=1)
    e.insert(0, "Untitled")
    create=Button(name, text="Create")
    #Code I want the button to execute: current=create_file(e), name.destroy()
    create.grid(row=2, column=3)
    name.mainloop()
    return current

有人知道吗?

此外,我需要能够从newfile()的返回中检索当前的电流。

2 个答案:

答案 0 :(得分:1)

如果你使用nonlocal current,你应该能够在create_file函数中直接设置当前变量,只要已经定义了当前变量,它就应该有效。记得在lambda函数中将函数调用连接到按钮command参数,以便为它提供参数。但是,在未来,确实遵循评论,整个代码可以重新组织,使其看起来更合理......

def newfile():
    current = None
    def create_file(entry):
        nonlocal current
        current = open(entry.get(),'w')
        e.master.destroy()
    chdir(askdirectory())
    name=Tk()
    name.title("Name the File?")
    prompt=Label(name, text="Enter name for new file:")
    prompt.grid(row=0)
    e=Entry(name)
    e.grid(row=1)
    e.insert(0, "Untitled")
    create=Button(name, text="Create", command = lambda: create_file(e))
    create.grid(row=2, column=3)
    name.mainloop()
    return current

答案 1 :(得分:0)

我要做的是创建一个类,在这个类中定义name和current作为类变量(self.name和self.current),这样我就可以在类函数中修改它们而没有问题。