还使用matplotlib清除Tkinter Canvas小部件的问题 [英] Issue clearing the Tkinter Canvas widget using also matplotlib
问题描述
在将某些变量输入到输入字段中并单击绘图按钮后,它将绘制散射角与检测器距离的关系图。此图显示在我创建的画布中。 plot方法是 def flup(),大约是通过单击名为 bgra的按钮执行的代码的一半。
This plots scattering angle versus detector distance once certain variables have been entered into Entry fields and the 'plot' button has been clicked. This plot shows up in the canvas I have created. The plot method is 'def flup()', about half way down the code which is carried out by clicking the button named 'bgra'.
当我更改输入字段中的变量然后再次点击plot时,程序会在画布上添加另一个plot,这很好。我要做的是添加一个按钮,该命令的作用是清除整个画布。
When I alter the variables in the entry fields then hit plot again the program adds another plot to the canvas, which is fine. What I want to do is add a button who's command is to clear the entire canvas.
在plot方法'flup()'之下,有一个名为def clear()的方法的开始,我想在其中定义一个函数,该函数将由一个按钮以清除画布。您会注意到,该按钮已在其下方几行创建,称为删除。有人可以给我举一个例子,我需要在def clear()方法中包括一小段代码,以便该按钮可以清除画布。
Just below the plot method 'flup()' there is the start of a method named def clear() in which I want to define a function which will be used by a button to clear the canvas. That button, you'll notice, has been created a few lines below that and is called 'delete'. Could someone please give me an example of the small piece of code I will need to include in the def clear() method in order that that button will clear the 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()
推荐答案
要删除画布上的所有内容,请调用 delete
方法,其参数为 all
。我对matplotlib一无所知,但我猜你会做这样的事情:
To delete everything on a canvas, call the delete
method with an argument of "all"
. I don't know anything about matplotlib, but I'm guessing you would do something like this:
canvas.get_tk_widget().delete("all")
这篇关于还使用matplotlib清除Tkinter Canvas小部件的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!