Ошибка: TclError: can't invoke "update" command: application has been destroyed

Фёдор06

Новичок
Пользователь
Авг 5, 2023
2
0
1
Windows
Python 3.8
Вот мой код:
Python:
from tkinter import *
from tkinter import messagebox
import time

tk = Tk()
app_running = True

size_canvas_x = 600
size_canvas_y = 600

def on_closing():
    global app_ranning
    if messagebox.askokcancel('Выход из игры', 'Хотите выйти из игры?'):
        app_ranning = False
        tk.destroy()

tk.protocol('WM_DELETE_WINDOW', on_closing)
tk.title('Игра Морской Бой')
tk.resizable(0, 0)
tk.wm_attributes('-topmost', 1)
canvas = Canvas(tk, width=size_canvas_x, height=size_canvas_y, bd=0, highlightthickness=0)
canvas.create_rectangle(0, 0, size_canvas_x, size_canvas_y, fill='white')
canvas.pack()
tk.update()

while app_running:
    if app_running:
        tk.update_idletasks()
        tk.update()
    time.sleep(0.005)
Я получаю ошибку...
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
Python:
import tkinter as tk
from tkinter import messagebox
import time

root = tk.Tk()
app_running = True

size_canvas_x = 600
size_canvas_y = 600


def on_closing():
    global app_running
    if messagebox.askokcancel('Выход из игры', 'Хотите выйти из игры?'):
        app_running = False
        # root.destroy()


root.protocol('WM_DELETE_WINDOW', on_closing)
root.title('Игра Морской Бой')
root.resizable(0, 0)
root.wm_attributes('-topmost', 1)
canvas = tk.Canvas(root, width=size_canvas_x, height=size_canvas_y, bd=0, highlightthickness=0)
canvas.create_rectangle(0, 0, size_canvas_x, size_canvas_y, fill='white')
canvas.pack()
root.update()

while app_running:
    if app_running:
        root.update_idletasks()
        root.update()
    time.sleep(0.005)
 

Фёдор06

Новичок
Пользователь
Авг 5, 2023
2
0
1
Подскажите, пожалуйста, в чём у меня ошибка? Я написал код, как автор видео, по которому я написал этот код. У него никаких ошибок не было. Почему?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
Подскажите, пожалуйста, в чём у меня ошибка? Я написал код, как автор видео, по которому я написал этот код. У него никаких ошибок не было. Почему?
Python:
...
app_running = True

size_canvas_x = 600
size_canvas_y = 600

def on_closing():
    global app_ranning
...
в одном месте app_running, в другом app_ranning ...

плюс импорт через звездочку плохая практика
плюс time.sleep(0.005) не может посчитать тысячные секунды, это команда бессмыслена

автор вышего видео не очень хороший программист...
 

Форум IT Специалистов