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

时间:2011-02-09 20:57:49

标签: 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()

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

3 个答案:

答案 0 :(得分:3)

@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()

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

答案 1 :(得分:3)

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

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()

答案 2 :(得分:0)

Apparently you just call quit on the root object that's running your mainloop

编辑:所有Tkinter小部件都有一个destroy()方法,可以销毁该小部件及其子级。所以你应该可以在你的Toplevel上调用它