尝试创建一个基于tkinter的窗口,该窗口允许用户单击按钮即可创建图表,从而刷新图表-每次都不会添加另一个图表。全部无需创建新窗口。想法是单击->创建图表,再次单击->用同一位置的新图表替换图表。没有多余的点击,没有多余的按钮可以关闭。使用matplotlib.backends.backend_tkagg和FigureCanvasTkAgg。似乎没有关于此的文档。在.get_tk_widget()中尝试了各种属性,以查看是否可以测试它是否已经存在,获取列表等。还尝试清除画布。

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import *

class testme:
    def __init__(self,frame1):
        self.frame1=frame1
        self.button=Button(self.frame1,text="DRAWME",command=self.plot)
        self.button1=Button(self.frame1,text="CLEARME",command=self.clearme)
        self.button.pack()
        self.button1.pack()

    def plot(self):
        f=Figure(figsize=(5,1))
        aplt=f.add_subplot(111)
        aplt.plot([1,2,3,4])
        self.wierdobject = FigureCanvasTkAgg(f, master=self.frame1)
        self.wierdobject.get_tk_widget().pack()
        self.wierdobject.draw()

    def clearme(self):
       self.wierdobject.get_tk_widget().pack_forget()

root=Tk()
aframe=Frame(root)
testme(aframe)
aframe.pack()  #packs a frame which given testme packs frame 1 in testme
root.mainloop()


附加的示例代码几乎接近我的目标,但是它需要一个“ CLEARME”按钮(仅在单击“ DRAWME”一次后才能正常工作。我只需要某种if语句来检查框架中是否已经存在FigureCanvasTkAgg对象,并且如果是这样,请删除它,而不是单击按钮。

经过多次尝试,我得出的结论是,我对这里发生的不止一件事情有根本的误解。

最佳答案

对于当前设置,只需在plot函数的开头添加try子句。

def plot(self):
    try:
        self.wierdobject.get_tk_widget().pack_forget()
    except AttributeError:
        pass
    f=Figure(figsize=(5,1))
    aplt=f.add_subplot(111)
    aplt.plot([1,2,3,4])
    self.wierdobject = FigureCanvasTkAgg(f, master=self.frame1)
    self.wierdobject.get_tk_widget().pack()
    self.wierdobject.draw()

10-08 00:30