我正在创建一个Tkinter程序,其中用户可以输入一个值来使用matplotlib-venn创建着色的Venn图。这是我的代码的一部分,当输入公式后点击'calculate‘按钮时,它会在Tkinter的画布上绘制matplotlib图。
def whenClicked():
if str(selected.get()) == '3':
plot1, v1 = configuration.createVenn3(formula.get())
diagram = FigureCanvasTkAgg(plot1, master=window)
if str(selected.get()) == '2':
plot2, v2 = configuration.createVenn2(formula.get())
diagram = FigureCanvasTkAgg(plot2, master=window)
diagram.get_tk_widget().pack()
diagram.draw()if-语句用于确定Venn图中的圆数,是否使matplotlib-venn在matplotlib-venn的2-圆或3-圆系统中绘制图。因此,从字面上讲,顺序是配置plot和v,然后定义图,它是canvas的对象,然后在Tkinter的画布上绘制图。
因此,FigureCanvasTkAgg函数将创建一个名为的新变量,并将配置好的图表绘制到图形用户界面上。然而,这里我很好奇,当用户输入新公式并再次单击按钮时,如何配置Python来删除(销毁)图表并创建(绘制)一个新公式。目前在上面的设置中,当我使用新的公式再次单击按钮时,新的图表将绘制在旧图表的下方,而不会破坏旧图表,因此这不是一个好主意。我希望新的图表将绘制在与旧图表完全相同的位置。
有什么想法吗?
发布于 2020-01-31 12:30:41
没有Minimal, Complete, and Verifiable example是不可能用一些代码来回答你的问题的,但基本上你不应该在每次绘制东西的时候重新创建一个新的图形/ FigureCanvasTkAgg。
其基本思想是在应用程序初始化期间创建一次Figure + FigureCanvasTkAgg,并可能同时在该figure上创建一个轴。
然后,您应该编写绘图函数so that it accept the axes as a parameter。这样,在处理按钮单击的函数中,您可以清除轴的内容(Axes.cla()),并使用绘图函数在现有轴上绘制新的图表。
https://stackoverflow.com/questions/59996895
复制相似问题