如何用新图形替换Matplotlib中的旧图形

2024-10-03 00:29:12 发布

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

晚上好,

我编写了一个函数,它从名为“datenplot”的数据集创建matplotlib图。每次我通过TKinter GUI中的按钮调用函数时,都会在上一个绘图下添加一个新绘图。我想有一个新的阴谋取代旧的功能,只要我从我的按钮调用,但我现在太无能了

代码如下:

def grafik(uebergebene_daten):
    datenplot = uebergebene_daten

    fig = Figure(figsize=(10, 4), dpi=100)

    fig.add_subplot(111).plot((datenplot[1]), (datenplot[0]))

    canvas1 = FigureCanvasTkAgg(fig, master = root)
    canvas1.draw()
    canvas1.get_tk_widget().pack(side=tk.TOP, fill=tk.NONE, expand=0)
    time.sleep(1)

问候和感谢

PS:我是新来的,这是我的第一个问题,我还是编程的初学者


Tags: 数据函数绘图matplotlibtkinterfiggui按钮
1条回答
网友
1楼 · 发布于 2024-10-03 00:29:12

最快的方法可能是使用canvas1.get_tk_widget().destroy()销毁画布本身。还请注意,使用time.sleep()可能会使GUI无响应,因此我建议您使用tkinter提供的after()方法

以下是一个例子:

from tkinter import *
from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, 
NavigationToolbar2Tk)

def grafik(uebergebene_daten=(10, 10, 10, 10)):
    global canvas1

    if canvas1:
        canvas1.get_tk_widget().destroy()
    
    datenplot = uebergebene_daten

    fig = Figure(figsize=(10, 4), dpi=100)
    plot1 = fig.add_subplot(111) 

    canvas1 = FigureCanvasTkAgg(fig, master = window)
    canvas1.draw()
    canvas1.get_tk_widget().pack(side=TOP, fill=NONE, expand=0)
    window.after(1000, None)


window = Tk() 

canvas1 = None

# setting the title 
window.title('Plotting in Tkinter') 

# dimensions of the main window 
window.geometry("700x700") 


# button that displays the plot 
plot_button = Button(master = window, command = grafik, height = 2, width = 10, text = "Plot") 
# place the button 
plot_button.pack() 

# run the gui 
window.mainloop()

相关问题 更多 >