Как закрыть окно Toplevel после завершения вызываемой функции?
Изменить: позвольте мне включить мой код, чтобы я мог получить определенную помощь.
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 ответа
@Kosig Это не будет выходить из корня. То есть. 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()
из любой части кода, но здесь он вызывается после того, как пользователь нажимает "нет".
Если вы создаете окно верхнего уровня с 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()
Видимо, вы просто позвоните quit
на корневом объекте, который работает вашmainloop
редактировать: все виджеты Tkinter имеютdestroy()
метод, который уничтожает этот виджет и его потомков. Таким образом, вы должны быть в состоянии позвонить на ваш Toplevel