单击时从 tkinter 按钮获取 return 值

Getting return value from tkinter button when clicked

我需要一个 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() 的 return 中检索电流。

我要做的是创建一个 class,在这个 class 中将名称和当前定义为 class 变量(self.name 和 self.current)所以我可以毫无问题地在 class 函数中修改它们。

如果你使用nonlocal current,你应该可以直接在create_file函数中设置current变量,只要current已经被定义,它应该可以工作。请记住将连接到按钮 command 参数的函数调用放在 lambda 函数中,这样您就可以为它提供参数。不过,在未来,真的要按照评论,整个代码可以重新组织,使它看起来更合理...

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