Почему остановка tkinter mainl oop во время обратного вызова в очереди вызывает ошибку в интерактивном режиме? - PullRequest
0 голосов
/ 19 января 2020

Вот фрагмент кода, который ставит обратный вызов в очередь с 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"

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

...