问题描述
我目前正在玩蛇游戏,但首先要显示一个设置窗口。为此,我使用了tkinter。在较小的项目中,我只是将所有代码写入了pressButton函数中,但是我现在想拥有非spagetti代码,所以我不打算这样做。问题是,我不知道如何从pressButton函数和settingsWin函数中获取进入括号中的输入值作为全局变量到我的主代码中。问题是我将函数用作Button的命令,因此无法使用“ return”。您可以从函数内部直接更改主代码中的全局变量吗?如果是,怎么办?还是有解决此问题的另一种方法? 我的代码:
def settingsWin():
def pressButton():
len = entryLen.get()
wid = entryWid.get()
speed = entrySpeed.get()
print(len+wid+speed)
SettingsWin.destroy()
return len
SettingsWin = Tk()
SettingsWin.geometry("600x600")
SettingsWin.title("Settings")
label1 = Label(SettingsWin,text="playing field [tiles]")
label1.pack()
entryLen = Entry(SettingsWin,bd=2,width=20)
entryLen.pack()
label2 = Label(SettingsWin,text="X")
label2.pack()
entryWid = Entry(SettingsWin,width=20)
entryWid.pack()
labelblanc = Label(SettingsWin,text="")
labelblanc.pack()
label3 = Label(SettingsWin,text="Speed [ms per tick]")
label3.pack()
entrySpeed = Entry(SettingsWin,width="20")
entrySpeed.pack()
okButton = Button(SettingsWin,text="OK",command=pressButton)
okButton.pack()
SettingsWin.mainloop()
len = "len"
wid = "wid"
speed = "speed"
解决方法
通常要求代码在函数外部的范围内更改变量(除非在闭包的情况下,这很有用),这通常表示代码有异味,可以使用global
来做到这一点。关键字:
greeting = "Hello world!"
def greet():
global greeting
greeting = "Goodbye world!"
print(greeting)
greet()
print(greeting)
通过声明变量greeting
在全局范围内,在函数定义内更改变量可以使函数影响全局变量。
如果您在嵌套的子项中工作,则nonlocal
关键字将在内部子项中提供对外部子项中变量的访问。它与global
相似,但它用于更广泛的词法范围,而不是全局范围。