Является ли tkinter в python 3.4.4 потокобезопасным?
Следующий код ведет себя по-разному в Python 2.7.11 (после установки future
) и 3.4.4
import tkinter as tk
from tkinter import ttk
import threading
from time import sleep
def do_something_slow():
sleep(5)
progressbar.grid_remove()
app = tk.Tk()
progressbar = ttk.Progressbar(app, mode='indeterminate')
progressbar.grid()
progressbar.start()
threading.Thread(target=do_something_slow).start()
app.mainloop()
В Python 3.4.4 это показывает окно с индикатором выполнения, который работает в течение 5 секунд, затем исчезает, но в Python 2.7.11 он показывает окно с индикатором выполнения, который выполняется в течение 5 секунд, затем окно перестает отвечать на запросы
Я думаю, что причина, по которой он работает неправильно при использовании python 2.7, заключается в том, что я не должен вызывать виджеты tkinter в другом потоке (tkinter не безопасен для потоков - я должен использовать очереди для связи между потоками), но тогда почему работа в питоне 3.4? Эта версия безопасна?