python - 使用 tkinter -- 如何清除FigureCanvasTkAgg 对象(如果存在或类似)?

标签 python tkinter tkinter-canvas

尝试创建一个基于 tkinter 的窗口,允许用户在单击按钮时创建图表,刷新图表 - 而不是每次都添加另一个图表。一切都无需创建新窗口。其想法是单击 -> 创建图表,再次单击 -> 在同一位置用新图表替换图表。无需额外的点击,无需额外的关闭按钮。使用 matplotlib.backends.backend_tkagg 和 FigureCanvasTkAgg。这方面的文档似乎几乎不存在。尝试了 .get_tk_widget() 中的各种属性,看看我是否可以测试它是否已经存在,获取列表等。还尝试清除 Canvas 。

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()    

关于python - 使用 tkinter -- 如何清除FigureCanvasTkAgg 对象(如果存在或类似)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56154065/

相关文章:

python - 在 QML 中制作隐藏/弹性项目

Python Tkinter,从类外部修改文本

python - 在 Python 中为多边形创建圆边

python - 在 Tkinter 中对对象进行动画处理以沿圆形路径移动

python-3.x - 如何在 20 秒后重复使用 Pillow 在现有图像上创建新图像?

python - 从字典中删除重复值而不删除键

Python字典替换值并保存在字典中

python - 导入错误: uncompyle2 even though it's installed

python - 使用 for 循环执行乘法变量的方法

python - tkinter 列表框和标签位置