python - 销毁并重新创建使用 FigureCanvasTkAgg 实现的 matplotlib 图
问题描述
我正在创建一个 Tkinter 程序,用户可以在其中输入一个值以使用 matplotlib-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-venn在matplotlib-venn的2圈或3圈系统中绘制图。所以从字面上看,顺序是配置plot和v,然后定义图表,即canvas的对象,然后在Tkinter的canvas上绘制图表。
因此 FigureCanvasTkAgg 函数将创建一个名为 diagram 的新变量并将配置的图表绘制到 GUI 上。但是,在这里我很好奇如何配置 Python 以在用户输入新公式并再次单击按钮时删除(销毁)图表并创建(绘制)新图表。目前在上面的设置中,当我用新公式再次单击按钮时,新图表将绘制在旧图表下方而不破坏旧图表,所以这不是一个好主意。我希望新图表将绘制在与旧图表完全相同的位置。
有任何想法吗?
解决方案
如果没有Minimal、Complete 和 Verifiable example的代码,就不可能用一些代码回答你的问题,但基本上你不应该在每次绘制某些东西时重新创建一个新的 Figure / FigureCanvasTkAgg。
基本思想是,您在应用程序初始化期间创建了一次 Figure + FigureCanvasTkAgg,并且可能同时在该图形上创建了一个 Axes。
然后你应该编写你的绘图函数,以便它接受轴作为参数。这样,在处理按钮单击的函数中,您可以清除轴的内容 ( Axes.cla() ),并使用绘图函数在现有轴中绘制新图表。
推荐阅读
- c# - ASP Core 2 如何更改(更新)活动用户的声明
- express - 将 HTTP 快速重定向到 HTTPS
- f# - fsi.commands 有参考吗?
- swift - 在 Swift 中反转透明图像的颜色
- c - 为什么我的 SelectionSort 并不总是有效?
- reactjs - React - 事件监听器冲突
- python-3.x - matplotlib/seaborn 图的 x 轴上的两个零
- php - 使用 require_once() 函数时 PHP 和 Mysql 错误连接?
- qt - Linux 上的 QML 窗口 FramelessWindowHint 仍可调整大小
- netsuite - NetSuite MapReduce - 从请求中捕获数据