线程

时间:2016-01-22 09:15:09

标签: python tkinter python-multithreading tkinter-canvas

我的代码如下。目标是将多个随机漫游绘制到FigureCanvasTkAgg上。

我没有基于threading.Thread为我的自定义Thread类添加代码,但它只是在.starting().stopping()的无限循环上重复输入函数。绑定按钮。

我发现循环运行越多,绘图变得越慢。我相信瓶颈在ax.plots(s)plots.show(),据我所知,这种方法可以有效地再次绘制每个先前的情节。假设我可以调用ax.clear()来再次加速循环。

我是否应采用不同的方式更新此图像以优化仅用于不清除的绘图?

(对优化其余部分不感兴趣,因为它们似乎没有按循环改变,因此无法解释减速情况,可以修正)

import numpy as np
import threading
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

def Updater(ax,plots):
    s = np.zeros(400)
    for i in range(399):
        s[i+1]=s[i]+random.choice([-1, 1])
    ax.plot(s)
    plots.show()

tk = Tk()
fig = plt.figure()
ax  = fig.add_subplot(111)

plots = FigureCanvasTkAgg(fig,tk)
plots.get_tk_widget().pack()

Thread(lambda ax=ax,plots=plots: Updater(ax,plots)).starting()
tk.mainloop()

0 个答案:

没有答案