我正在制作用户界面,用户必须将数据放入框架中,然后单击按钮创建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')
你能帮忙吗?非常感谢!
我想补充一点,我是一个有编程的人,而不是母语为英语的人,所以如果你看到任何关于那些不要犹豫告诉我的错误的话!
答案 0 :(得分:0)
这里有两个主要选项。
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
对象,让该函数将该对象作为参数,然后让该函数使用新图重新配置画布。graphiqueMatplot()
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
函数,捕获异常:delete()