编辑: 让我包含我的代码,以便我可以得到一些具体的帮助。
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按钮的原始窗口。我该怎么办?
答案 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上调用它