关闭窗口后,Tkinter mainloop()不退出是由于Tkinter的事件循环(mainloop)仍在运行。Tkinter的事件循环是一个无限循环,用于接收用户的输入事件并进行处理。当窗口被关闭时,Tkinter会将关闭窗口的事件传递给事件循环,但是事件循环并不会自动退出。
解决这个问题的一种常见方法是在关闭窗口的回调函数中添加退出事件循环的代码。可以通过调用Tkinter的destroy()
方法来关闭窗口,并在关闭窗口后添加root.quit()
或者root.destroy()
代码来退出事件循环。
以下是一个示例代码:
import tkinter as tk
def on_closing():
root.destroy() # 关闭窗口
root.quit() # 退出事件循环
root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", on_closing) # 设置关闭窗口的回调函数
# 添加窗口内容和逻辑代码
root.mainloop() # 启动事件循环
在上述代码中,on_closing()
函数被指定为关闭窗口时的回调函数,并通过root.protocol()
方法将该函数与关闭窗口事件绑定。当用户关闭窗口时,on_closing()
函数会被调用,其中的root.destroy()
方法关闭窗口,root.quit()
方法退出事件循环。
需要注意的是,root.quit()
方法只会退出事件循环,但程序仍会继续执行后面的代码,而root.destroy()
方法会销毁窗口并结束程序的执行。根据具体需求,选择适合的方法即可。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云