Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter上有没有办法,当我在画布上绘制一个新的图形时,前一个图形会被破坏,而不是堆叠在右边?_Python_Tkinter - Fatal编程技术网

Python 在Tkinter上有没有办法,当我在画布上绘制一个新的图形时,前一个图形会被破坏,而不是堆叠在右边?

Python 在Tkinter上有没有办法,当我在画布上绘制一个新的图形时,前一个图形会被破坏,而不是堆叠在右边?,python,tkinter,Python,Tkinter,当我在画布上绘制一个新图形时,上一个图形是否会被销毁,而不是堆叠在右侧?我尝试了一些方法,比如使用.destroy(),但似乎没有任何效果。。。每次我按“绘图”按钮时,它都会将新图形放在右边。我不知道如何解决它,所以任何帮助都是非常受欢迎的 下面是我按下按钮时发生的情况的图片:另一个图形添加到右侧。我只想要一个(当我按下按钮时得到的最后一个) 这是我的密码: class StartPage(tk.Frame): def __init__(self, parent, cont

当我在画布上绘制一个新图形时,上一个图形是否会被销毁,而不是堆叠在右侧?我尝试了一些方法,比如使用
.destroy()
,但似乎没有任何效果。。。每次我按“绘图”按钮时,它都会将新图形放在右边。我不知道如何解决它,所以任何帮助都是非常受欢迎的

下面是我按下按钮时发生的情况的图片:另一个图形添加到右侧。我只想要一个(当我按下按钮时得到的最后一个)

这是我的密码:

class StartPage(tk.Frame):
    
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        button2 = ttk.Button(self, text="draw",command=lambda:  func1())
        button2.pack()
        entry1 = Entry(self,width = 20)
        entry1.pack()
        entry2 = Entry(self,width = 20)
        entry2.pack()
        entry3 = Entry(self,width = 20)
        entry3.pack()

        def func1():
            rho = float(entry1.get())
            sigma = float(entry2.get())
            beta = float(entry3.get())
            def f(state, t):
                x, y, z = state  
                return sigma * y, z-sigma, rho*x * y - beta * z  

            state0 = [4.0, 3.0, 2.0]
            t = np.arange(0.0, 40.0, 0.01)

            states = odeint(f, state0, t)

            fig = plt.figure()
            canvas = FigureCanvasTkAgg(fig, self)
            canvas.draw() 
            ax = fig.gca(projection='3d')
            ax.plot(states[:, 0], states[:, 1], states[:, 2])
            canvas.get_tk_widget().pack(side=tk.LEFT,fill=tk.BOTH, expand=True)

您可以在
func1()外部创建
fig
canvas
并更新其中的图形:

class起始页(tk.Frame):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
self.controller=控制器
button2=ttk.Button(self,text=“draw”,command=lambda:func1())
按钮2.pack()
entry1=tk.Entry(自身,宽度=20)
entry1.pack()
entry2=tk.Entry(自身,宽度=20)
entry2.pack()
入口3=传统入口(自身,宽度=20)
entry3.pack()
图=plt.图()
画布=图CAVASTKAGG(图,自身)
def func1():
rho=float(entry1.get())
sigma=float(entry2.get())
beta=float(entry3.get())
def f(状态,t):
x、 y,z=状态
返回sigma*y,z-sigma,rho*x*y-β*z
state0=[4.0,3.0,2.0]
t=np.arange(0.0,40.0,0.01)
states=odeint(f,state0,t)
plt.clf()#清除当前数字
ax=图gca(投影=3d')
ax.绘图(状态[:,0],状态[:,1],状态[:,2])
canvas.draw()#更新图形
canvas.get_tk_widget().pack(fill=tk.BOTH,expand=True)

我认为您不能销毁canvas,因为您使用canvas作为函数
func1
的局部变量。请改用
self.canvas
重试。如果它不起作用,告诉我,我会仔细看看