Tkinter不断创建嵌入图,而不是更新当前图

时间:2015-06-06 21:15:23

标签: python matplotlib plot tkinter refresh

我知道网上有很多问题,但不幸的是,没有人对此有所帮助。我的相关matplotlib导入是:

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

以下是我打电话给新剧情的方法:

self.myFig1  = Figure(figsize = (10, 4), tight_layout = True)
self.myPlot1 = self.myFig1.add_subplot(111)
self.myPlot1.plot([blah],[blah])
canvas1 = FigureCanvasTkAgg(self.myFig1, self.myFrame)
canvas1.show()
canvas1.get_tk_widget().grid()

我有一个刷新按钮,一直在调用最终创建这个图的功能,但是我需要一个嵌入式图,每次点击按钮后都会更新,而不是重新创建。我尝试过像Figure.close(), Figure.clf()这样的东西但没有效果。我很感激你的帮助。

其他信息:它一直在创建一个新情节的原因是因为我一遍又一遍地重复它。所以我删除了代码的.grid()部分,我尝试了下面这样的东西,但是没有用:

self.myFig1.clf()
self.myFig1  = Figure(figsize = (10, 4), tight_layout = True)
self.myPlot1 = self.myFig1.add_subplot(111)
self.myPlot1.plot([blah],[blah])
canvas1 = FigureCanvasTkAgg(self.myFig1, self.myFrame)
canvas1.draw()

这只是破坏了人物,画布,一切,并没有绘制任何东西。

2 个答案:

答案 0 :(得分:1)

    self.myFig.clear()
    self.myPlot = self.myFig.add_subplot(111,  **self.nadalkwArgs)
    self.myPlot.plot([series1], [series2])
    self.myFig.canvas.draw()

是什么解决了我的问题。你的刷新情节"按钮或方法应该有这个以保持画布,清除旧的情节,制作新的情节并保留情节样式元素,如xlabel,ylabel等。所以基本上,首先你清除图(不是subplot,self.myPlot.clear()会清除情节,但你不能用你的kwargs那样),然后你用kwargs重新创建子图,然后你绘图,最后你.canvas.draw( )

答案 1 :(得分:0)

无需重新创建新的画布或无花果。 将FigureCanvasTkAgg网格化之后,您只能通过以下方式重置按钮回调中的行:

self.myPlot1.set_data(xdata,ydata)
self.myFig.canvas.draw()