【问题标题】:Tkinter destroying a ToplevelTkinter 破坏顶层
【发布时间】:2013-08-22 15:48:53
【问题描述】:

我无法销毁顶层(Tkinter,python)

在我的程序中

1) 一开始用户按下按钮,顶层出现

2) 在顶层内部还有一些小部件和一个按钮

3) 当用户按下这个(第二个)按钮时,函数 (name_of_toplevel.destroy()) 开始工作

4) 但是终端给我写了“NameError:全局名称'name_of_toplevel'未定义”

5) 但它确实被定义了!

6) 按钮通过“bind”方法与功能绑定

节目正文:

from Tkinter import *


def Begin(event):
    okno.destroy()

def QuitAll(event):
    exit(0)

def OpenOkno(event):
    #print "<ButtonRelease-1> really works! Horray!"
    okno = Toplevel()
    okno.title('Question')
    okno.geometry('700x300')

    Sign = Label(okno,text = 'Quit the program?', font = 'Arial 17')
    Sign.grid(row = 2, column = 3)

    OK = Button(okno, text = 'YES',  bg = 'yellow', fg = 'blue', font = 'Arial 17')
    OK.grid(row = 4, column = 2)

    OK.bind("<ButtonRelease-1>",QuitAll)


    NO = Button(okno, text = 'NO', bg = 'yellow', fg = 'blue', font = 'Arial 17')
    NO.grid(row = 4, column = 4)

    NO.bind("<ButtonRelease-1>",Begin)




root  = Tk()  # main window 'program_on_Python'

root.title('Program_on_Python')

root.geometry('400x600')



knpk = Button(root, text = 'click here!', width = 30, height = 5, bg = 'yellow', fg =   'blue', font = 'Arial 17')
knpk.grid(row = 2, column = 2)

knpk.bind("<ButtonRelease-1>",OpenOkno)

root.mainloop()

如果可以的话,请帮帮我

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    oknoOpenOkno 函数之外不存在,因此尝试在其他任何地方访问它会导致NameError。解决此问题的一种方法是将Begin 移动到OpenOkno 内部,okno 对象在其中可见。

    def OpenOkno(event):
        def Begin(event):
            okno.destroy()
    
        #print "<ButtonRelease-1> really works! Horray!"
        okno = Toplevel()
        #etc... Put rest of function here
    

    您还可以使用 lambda 表达式代替完整函数,作为 Bind 的参数。

    NO.bind("<ButtonRelease-1>", lambda event: okno.destroy())
    

    您也可以将okno 设为全局变量,这样它就可以在任何地方看到。然后,您需要在需要分配给 okno 的任何地方使用 global okno 语句。

    okno = None
    
    def QuitAll(event):
        exit(0)
    
    def Begin(event):
        okno.destroy()
    
    def OpenOkno(event):
    
        #print "<ButtonRelease-1> really works! Horray!"
        global okno
        #etc... Put rest of function here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2013-04-06
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多