它调用的函数完成后如何关闭Toplevel窗口?

Kos*_*sig 4 python tkinter

编辑:让我包含我的代码,以便我可以获得一些特定的帮助。

import Tkinter

def goPush():
    win2=Tkinter.Toplevel()
    win2.geometry('400x50')
    Tkinter.Label(win2,text="If you have prepared as Help describes select Go otherwise select Go Back").pack()
    Tkinter.Button(win2,text="Go",command=bounceProg).pack(side=Tkinter.RIGHT,padx=5)
    Tkinter.Button(win2, text="Go Back", command=win2.destroy).pack(side=Tkinter.RIGHT)

def bounceProg():
    d=1
    print d
root=Tkinter.Tk()
root.geometry('500x100')
Tkinter.Button(text='Go', command=goPush).pack(side=Tkinter.RIGHT,ipadx=50)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

因此,当您运行该程序时,它会打开一个显示 Go 的窗口。然后 Go 打开一个窗口,询问您是否已阅读帮助(我没有包含在此代码示例中)并提供 Go Back(返回)和 Go。当您选择 Go 时,它会调用一个打印 1 的函数。在它打印 1 后,我希望窗口关闭,返回到包含 Go 按钮的原始窗口。我怎么做这样的事情?

mar*_*arw 7

@Kosig 它不会退出 root。IE。self.foo = tk.Toplevel(self)进而self.foo.destroy()

例如:

class Foo(tk.Frame):
    """Foo example"""

    def __init__(self, master=None):
        """Draw Foo GUI"""
        tk.Frame.__init__(self, master)
        self.grid()
        self.draw_window_bar()

    def draw_window_bar(self):
        """Draw bar TopLevel window"""
        self.window_bar = tk.Toplevel(self)
        # Some uber-pythonian code here...
        ask_yes_or_no = messagebox.askyesno('Brian?', 'Romani Ite Domum')
        if not ask_yes_or_no:
            self.window_bar.destroy()
Run Code Online (Sandbox Code Playgroud)

您有一个主要对象,即 Foo。Foo 有一个主窗口(称为“框架”),它从tk.Frame. 之后,必须在其中创建所有顶层窗口(框架)。所以,你的新窗口在这里self.window_bar,它的所有“对象”都在那里,包括销毁它的方法(self.window_bar.destroy())。您可以self.window_bar.destroy()从代码的任何部分调用,但这里是在用户单击“否”后调用的。


Bry*_*ley 5

如果使用该Toplevel命令创建顶层窗口,则使用destroywindow 对象的方法销毁它。例如:

import Tkinter as tk

class MyToplevel(tk.Toplevel):
    def __init__(self, title="hello, world", command=None):
        tk.Toplevel.__init__(self)
        self.wm_title(title)
        button = tk.Button(self, text="OK", command=lambda toplevel=self: command(toplevel))
        button.pack()

if __name__ == "__main__":
    def go(top):
        print "my work here is done"
        top.destroy()

    app = tk.Tk()
    t = MyToplevel(command=go)
    t.wm_deiconify()
    app.mainloop()
Run Code Online (Sandbox Code Playgroud)