У меня есть код 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)
к on_exit()
(или если я сначала нажал кнопку перед закрытием окна), но если я попытался закрытьокно без нажатия кнопки, код не выйдет.
Значит ли это, что wait_variable
не только заставляет приложение tkinter ждать, но и предотвращает выход кода Python?!
Я пыталсяos._exit(1)
и это сработало, но я думаю, что это не чисто.
Спасибо