我正在创建一个Tkinter程序,用户可以在其中输入一个值,使用matplotlib-Venn创建着色Venn图。下面是我的代码的一部分,在输入公式后单击“计算”按钮时给出了说明,该公式在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语句用于确定维恩图中的圈数,是使matplotlib维恩在matplotlib维恩的2圈或3圈系统中绘制图。从字面上说,顺序是配置plot和v,然后定义图表,它是canvas的对象,然后在Tkinter的画布上绘制图表
因此FigureCanvasTkAgg函数将创建一个名为diagram的新变量,并将配置好的图表绘制到GUI上。然而,在这里我很好奇,当用户输入新公式并再次单击按钮时,如何配置Python来删除(销毁)图表并创建(绘制)新图表。目前在上面的设置中,当我用一个新公式再次单击按钮时,新图表将绘制在旧图表下方,而不会破坏旧图表,因此这不是一个好主意。我希望新图表将绘制在与旧图表完全相同的位置
有什么想法吗
如果没有Minimal, Complete, and Verifiable example,用一些代码回答您的问题是不可能的,但基本上,您不应该在每次绘图时都重新创建一个新的Figure/FigureCanvasTkAgg
基本思想是在应用程序初始化期间创建一次Figure+Figure CastKagg,并且可能同时在该Figure上创建一个轴
然后您应该编写绘图函数so that it accept the axes as a parameter。这样,在处理按钮单击的函数中,可以清除轴(Axes.cla())的内容,并使用绘图函数在现有轴中绘制新图表
相关问题 更多 >
编程相关推荐