Я пишу игру, используя pygame и tkinter, и когда я выхожу, используя крестик окна, он выдает ошибку (но все равно успешно завершает работу): _tkinter.TclError: не удается вызвать команду «обновить»: приложение было уничтожено Я хотел бы остановить это сообщение об ошибке Код, который выдает ошибку, — «root.update».
Я загрузил код на https://gist.github.com/spacejoey86/4be3c84a32195ede0f798d3527c12874#file-second-revision
вкратце: вы должны назначить/привязать к перекрестной функции окна, которая уничтожит окно и установит вашу собственную переменную is_tk_closed = True, а позже вы сделаете if not is_tk_closed: root.update(). Таким образом, root.update() будет выполняться только тогда, когда окно Tkinter все еще существует.
Пожалуйста, не ссылайтесь на код на другом сайте. В вашем вопросе должно быть достаточно кода, чтобы мы могли диагностировать проблему. Пожалуйста, редактировать вашего вопроса, чтобы включить минимальный воспроизводимый пример.






Вы должны назначить функцию перекрестию окна, которая установит переменную (т.е. tk_open), а затем вы сможете использовать ее для выполнения root.update() только тогда, когда окно все еще существует.
Код основан на Tkinter: перехват удаления окна на effbot.org
Вы можете использовать root.protocol() или root.bind() — подробнее читайте на effbot.org
import tkinter as tk
def _delete_window():
global tk_open
print("delete_window")
tk_open = False
root.destroy()
def _destroy(event):
global tk_open
print("destroy")
tk_open = False
root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", _delete_window)
#root.bind("<Destroy>", _destroy)
tk_open = True
while tk_open:
root.update()
Возможно, в вашем коде вам нужно будет только установить running == False вместо использования tk_open.
Спасибо, я пропустил глобальный бит.
Пожалуйста, уточните вашу конкретную проблему или добавьте дополнительные детали, чтобы выделить именно то, что вам нужно. В том виде, в котором он сейчас написан, трудно точно сказать, о чем вы спрашиваете. См. страницу Как спросить для уточнения этого вопроса.