我有两个def,如下所示。其中一个创建了一个带有两个按钮选项的topLevel小部件。其中一个按钮调用另一个def。在另一个def中,我想使用topLevelName.destroy()关闭topLevel小部件。但我一直收到错误,说没有定义topLevelName。
我的代码:
def func1():
print("We are in func1.")
topLevelName.destroy() <---Error occurs here.
def func2():
topLevelName = tkinter.Toplevel()
yesButton= tkinter.Button(topLevelName , text="Yes", command=func1)
noButton= tkinter.Button(topLevelName , text="No",command=topLevelName.destroy)
错误讯息:
NameError: name 'topLevelName' is not defined
有谁知道我在这里做错了什么?
答案 0 :(得分:2)
您的topLevelName
是本地变量,这意味着它只能在func2
内访问。如果要在该范围之外访问它,则应将其设为全局变量或使用类。使用类构建相对较大的GUI是更好的解决方案,但对于这个,您可以使用全局变量。
topLevelName = None #create the variable in global scope
def func1():
print("We are in func1.")
topLevelName.destroy()
def func2():
global topLevelName #which means, the changes will be applied in global scope
topLevelName = tkinter.Toplevel()
yesButton= tkinter.Button(topLevelName , text="Yes", command=func1)
noButton= tkinter.Button(topLevelName , text="No",command=topLevelName.destroy)