Поскольку tkinter не ориентирован на многопотоковое исполнение, я часто вижу, как люди используют метод after
, чтобы поставить в очередь некоторый код для выполнения в главном потоке.Вот пример:
import tkinter as tk
from threading import Thread
def change_title():
root.after(0, root.title, 'foo')
root = tk.Tk()
Thread(name='worker', target=change_title).start()
root.mainloop()
Таким образом, вместо выполнения root.title('foo')
непосредственно в потоке worker
, мы ставим его в очередь с root.after
и позволяем основному потоку выполнить его.Но разве звонить root.after
не так плохо, как звонить root.title
?root.after
потокобезопасен?