销毁和重新创建使用FigureCastKagg实现的matplotlib图

2024-05-18 07:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个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来删除(销毁)图表并创建(绘制)新图表。目前在上面的设置中,当我用一个新公式再次单击按钮时,新图表将绘制在旧图表下方,而不会破坏旧图表,因此这不是一个好主意。我希望新图表将绘制在与旧图表完全相同的位置

有什么想法吗


Tags: 用户getifmatplotlibtkinter画布图表绘制
1条回答
网友
1楼 · 发布于 2024-05-18 07:55:06

如果没有Minimal, Complete, and Verifiable example,用一些代码回答您的问题是不可能的,但基本上,您不应该在每次绘图时都重新创建一个新的Figure/FigureCanvasTkAgg

基本思想是在应用程序初始化期间创建一次Figure+Figure CastKagg,并且可能同时在该Figure上创建一个轴

然后您应该编写绘图函数so that it accept the axes as a parameter。这样,在处理按钮单击的函数中,可以清除轴(Axes.cla())的内容,并使用绘图函数在现有轴中绘制新图表

相关问题 更多 >