我需要一个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()
的返回中检索当前的电流。
答案 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),这样我就可以在类函数中修改它们而没有问题。