有一个问题从另一个关闭topLevel小部件" def"

时间:2016-03-17 15:46:35

标签: python python-3.x tkinter

我有两个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

有谁知道我在这里做错了什么?

1 个答案:

答案 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)