我有一个 python 代码,其中包括tkinter
窗口和其他正在运行的任务。
我一直在尝试绑定"WM_DELETE_WINDOW"
当我关闭窗口但无法实现该功能时,该事件会退出我的 python 代码。
这就是我尝试的:
def on_exit():
root.destroy()
sys.exit()
root.protocol('WM_DELETE_WINDOW', on_exit)
窗口已成功销毁,但 python 代码未退出。任何可能的原因sys.exit()
不去工作?
我究竟做错了什么?我应该尝试任何替代方法吗?
做了一些测试,我弄清楚了可能是什么问题。
这是一个小代码,总结了我的代码,该代码要大得多。
import tkinter as tk
import sys
root = tk.Tk()
submitted = tk.IntVar()
def on_exit():
root.destroy()
sys.exit()
root.protocol('WM_DELETE_WINDOW', on_exit)
def submit():
submitted.set(1)
print("submitted")
button= tk.Button(root, text="Submit",command=submit)
button.pack()
button.wait_variable(submitted)
root.mainloop()
我现在相信wait_variable
是问题的根源。
当我添加时代码实际上退出了submitted.set(1)
to on_exit()
(或者如果我在关闭窗口之前先单击了按钮)但是如果我尝试在不按按钮的情况下关闭窗口,则代码将不会退出。
那么这是否意味着wait_variable
不仅让 tkinter 应用等待,还阻止 python 代码退出?!
I tried os._exit(1)
它有效,但我认为它不干净。