销毁一个tkinter窗口继续进行

时间:2017-01-15 17:36:27

标签: python python-2.7 tkinter

我为我的应用程序创建了一个tkinter Toplevel窗口,后来在程序中销毁了它但是在销毁窗口之后,程序没有被进一步执行并且在那里无所事事地被击中。这是我使用的代码: -

#login.py
from tkinter import *

class gui:
    def __init__(self):
        #does something

    def login(self):
        self.winLogin.destroy()

    def guilogin(self):
         self.winLogin = Toplevel()
         btn = Button(self.winLogin,command=self.login,text='asd')
         btn.pack()
        self.winLogin.mainloop()


 #main.py
 import login
 from tkinter import *

 main = Tk()
 a = login.gui()
 a.guilogin()
 if True:
     #some code and this part doesnot get executed
     main.mainloop()
 else:
     main.destroy()

我运行main.py文件并且代码被触发并且在if部分之前什么都不做。我总是不知道什么是错的。 PLS。救命啊!

1 个答案:

答案 0 :(得分:2)

正如furas在评论中所说,你不应该在顶层调用mainloop,而是使用grab_set来禁用主窗口,wait_window等待顶层关闭:

from tkinter import Tk, Toplevel, Button

def login():
    top = Toplevel(root)
    Button(top, text="Quit", command=top.destroy).pack()
    top.grab_set() # deactivate the main GUI while top is opened
    root.wait_window(top) # wait for top to be closed before doing the rest
    print("logged in")

root = Tk()

Button(root, text="login", command=login).pack()

root.mainloop()