python - 使用 matplotlib 清除 Tkinter Canvas 小部件的问题

标签 python matplotlib tkinter canvas

一旦将某些变量输入输入字段并单击“绘图”按钮,就会绘制散射角与检测器距离的关系图。该图显示在我创建的 Canvas 中。绘图方法是“def flup()”,大约是通过单击名为“bgra”的按钮执行的代码的一半。

当我更改输入字段中的变量然后再次点击绘图时,程序会在 Canvas 上添加另一个绘图,这很好。我想要做的是添加一个按钮,该按钮的命令是清除整个 Canvas 。

在绘图方法“flup()”下方有一个名为 def clear() 的方法的开始,我想在其中定义一个函数,按钮将使用该函数来清除 Canvas 。您会注意到,该按钮是在其下方几行创建的,称为“删除”。有人可以给我一个我需要包含在 def clear() 方法中的一小段代码示例,以便该按钮清除 Canvas 。

from numpy import *
import matplotlib.pyplot as plt
fromTkinter import *
import tkMessageBox
from pylab import savefig
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2TkAgg
import matplotlib.backend_bases       
from matplotlib.figure import Figure

def rutherford():
    tkMessageBox.showinfo("hello world", j)
def N():
    tkMessageBox.showinfo("Variable N", "Number of alpha particles incident on foil")

def T():
    tkMessageBox.showinfo('Variable t', 'Thickness of foil in metres')

def K():
    tkMessageBox.showinfo('Variable E', 'Kinetic energy of alpha particles in joules')

def atom():
    tkMessageBox.showinfo('Variable Z', 'Atomic number of element from which the foil is made, or the name of the element')



class App:
    def __init__(self, master):
        frame = Frame(master) #creates the first frame

        Button(frame, text = "?", command=N).grid(row=1,column=2) #various help buttons
        Button(frame, text = "?", command=T).grid(row=2,column=2)
        Button(frame, text = "?", command=K).grid(row=3,column=2)
        Button(frame, text = "?", command=atom).grid(row=4,column=2)

        Nlabel = Label(frame, text = "N =").grid(row=1, column=0, sticky=E) #labels next to the entry frame
        tlabel = Label(frame, text="t =").grid(row=2,column=0, sticky=E)    
        Elabel = Label(frame, text="E =").grid(row=3,column=0, sticky=E)        
        Zlabel = Label(frame, text="Z =").grid(row=4, column=0, sticky=E)

        eN=Entry(frame)
        eN.grid(row=1,column=1)
        et=Entry(frame)
        et.grid(row=2,column=1)
        eE=Entry(frame)
        eE.grid(row=3,column=1)
        eZ=Entry(frame)
        eZ.grid(row=4,column=1)

        def flup():         #the plot
            N=float(eN.get())#turn string into float
            t=float(et.get())
            E=float(eE.get())
            Z=float(eZ.get())
            r=10*(10**-10)
            e=1.602*(10**-19)
            a=5*(10**30)
            i = linspace(math.pi/80, math.pi, 1000)
            list =[]

            for p in i:
                b = (N*a*t)/(16.0*(r**2))
                c = ((2.0*Z*(e**2))/(E*4.0*math.pi*8.854*(10**-12)))**2
                d = (1.0/(math.sin(p/2.0)))**4
                n=b*c*d
                list.append(n)

            f=Figure(figsize=(5,4), dpi=100)
            g=f.add_subplot(1,1,1)


            g.plot(i,list)

            canvas=FigureCanvasTkAgg(f, master=master)
            canvas.show()
            canvas.get_tk_widget().pack(side=LEFT, fill=BOTH, expand=1)

            canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)


        #def clear():


        bgra=Button(frame, text = "Plot", command=flup) #this button makes the plot
        bgra.grid(row=5,column=1)

        delete=Button(frame,text='Clear All', command=clear)
        delete.grid(row=5,column=2)




        frame2=Frame(master)

        b1=Button(frame2, text="Rutherford Scattering??", command=rutherford)
        b1.pack(side=LEFT)
        frame2.pack()
        frame.pack()



root = Tk()
app = App(root)
root.mainloop()

最佳答案

要删除 Canvas 上的所有内容,请使用参数"all" 调用delete 方法。我对 matplotlib 一无所知,但我猜你会做这样的事情:

canvas.get_tk_widget().delete("all")

关于python - 使用 matplotlib 清除 Tkinter Canvas 小部件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820748/

相关文章:

python - 如何绘制 pandas 系列的实时图表?并间歇性地从文件中读取

python - 添加 seaborn clustermap 以与其他图一起绘制

python - 与其他代码一起使用时,Tkinter 保存到文件不起作用

python - 在 Canvas 上创建可滚动的表格

python - 属性错误: 'NoneType' object has no attribute 'grid_remove'

python - 使用 Python 将文本中的部分数据提取到 csv 中

python - Flask 请求语法错误的问题

python - 多处理:每个任务的进度条

python输入: overload vs TypeVar

python - 如何绘制尖角?