以下代码在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不是线程安全的 - 我应该使用队列来在线程之间进行通信),但是为什么它在python 3.4中有效?这个版本的线程安全吗?