清除包含Matplotlib图形的tkinter画布

时间:2015-05-06 17:31:04

标签: python canvas matplotlib tkinter

我正在制作用户界面,用户必须将数据放入框架中,然后单击按钮创建Matplotlib界面。我能够使它工作,我的图表与工具栏一起显示。

但是当我再次点击该按钮时,我无法让其他图表消失。我看到我可以使用 .delete 来清除画布。把它作为功能的第一行将给我"'画布'在分配之前使用"。我尝试将其作为全球,但这似乎也无效。

以下是代码中有问题的部分:

def graphiqueMatplot():
    #Not included: computation of the coordinates xS, yS,...
    f = Figure(figsize=(5,5), dpi=100)
    canvas = FigureCanvasTkAgg(f, master=courbe)
    a = f.add_subplot(111)
    a.plot(xS, yS)
    a.plot(xT, yT)
    a.plot(xL, yL)

    a.axis('tight')

    canvas.show()
    canvas.get_tk_widget().pack(side='top', fill=Y, expand=1)
    toolbar = NavigationToolbar2TkAgg( canvas, courbe )
    toolbar.update()
    canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

#Main Program
cadreSimulation=Labelframe(root, text='Simulation')
courbe=Canvas(cadreSimulation, height=500, width=500, cursor='trek')

boutonGraphiqueMatplot=Button(cadreSimulation, text='Launch Matplotlib', command=graphiqueMatplot)
boutonGraphiqueMatplot.pack(side='top', fill='x')

courbe.pack()

cadreSimulation.pack(side='left')

你能帮忙吗?非常感谢!

我想补充一点,我是一个有编程的人,而不是母语为英语的人,所以如果你看到任何关于那些不要犹豫告诉我的错误的话!

1 个答案:

答案 0 :(得分:0)

这里有两个主要选项。

  1. string changeServerInPathString(string originalString, string newServer) { List<string> stringParts = originalString.TrimStart('\\').Split('\\').ToList(); stringParts.RemoveAt(0); stringParts.Insert(0, newServer); return string.Join("\\", stringParts.ToArray()).Insert(0, "\\\\"); } 函数之外创建FigureCanvasTkAgg对象,让该函数将该对象作为参数,然后让该函数使用新图重新配置画布。
  2. graphiqueMatplot()
    1. 按照您的意愿尝试canvas = FigureCanvasTkAgg(f, master=courbe) # more canvas creation and packing ... boutonGraphiqueMatplot=Button(cadreSimulation, text='Launch Matplotlib', command=lambda: graphiqueMatplot(canvas)) ... def graphiqueMatplot(c): f = Figure(figsize=(5,5), dpi=100) c.config(figure=f) # this is how tkinter objects are reconfigured, # but it may be different for FigureCanvasTkAgg objects! a = f.add_subplot(111) # more plotting statements here 函数,捕获异常:
    2. delete()