Почему остановка основного цикла tkinter, когда обратный вызов находится в очереди, вызывает ошибку в интерактивном режиме?

Вот фрагмент кода, который ставит в очередь обратный вызов с Tk.after а затем уничтожает окно перед выполнением обратного вызова:

import tkinter as tk

win = tk.Tk()

win.after(0, win.destroy)
win.after(200, lambda: None)

win.mainloop()

Выполнение этого кода обычно не дает никаких результатов:

Aran-Fey@DESKTOP-SJGQDQ8 /d/U/A/Desktop> python3 tkinter_demo.py
Aran-Fey@DESKTOP-SJGQDQ8 /d/U/A/Desktop>

Но если интерпретатор переходит в интерактивный режим после выполнения этого кода, tkinter выводит сообщение об ошибке:

Aran-Fey@DESKTOP-SJGQDQ8 /d/U/A/Desktop> python3 -i tkinter_demo.py
>>> invalid command name "2256505886152<lambda>"
    while executing
"2256505886152<lambda>"
    ("after" script)
can't invoke "event" command: application has been destroyed
    while executing
"event generate $w <<ThemeChanged>>"
    (procedure "ttk::ThemeChanged" line 6)
    invoked from within
"ttk::ThemeChanged"

Почему это происходит и что я могу с этим поделать?

0 ответов

Другие вопросы по тегам