Python 函数未暂停

Python 函数未暂停,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,当我试图运行我的代码时,所有的东西都会执行,但after函数调用会立即更新,尽管我延迟了5秒。除此之外,gui不显示任何图形 import tkinter as tk import numpy as np import time import functools import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, Navigation

当我试图运行我的代码时,所有的东西都会执行,但after函数调用会立即更新,尽管我延迟了5秒。除此之外,gui不显示任何图形

import tkinter as tk
import numpy as np
import time
import functools

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure

main = tk.Tk()
container = tk.Frame(main)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)

f = Figure(figsize=(5,5), dpi=100)
a = f.add_subplot(111)
canvas = FigureCanvasTkAgg(f, master=main)
canvas.show()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

def update(a, canvas):
        data = np.genfromtxt('test.csv', delimiter=',', names=['x', 'y'])
        a.clear()
        a.plot(data['x'], data['y'], color='r', label='the data')


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

        print ("update")
        main.after(5000, functools.partial(update, a)(canvas))

main.after(5000, functools.partial(update, a)(canvas))
main.mainloop()

非常感谢您对解决此问题的任何帮助或一般python提示。

请考虑以下代码行:

main.after(5000, functools.partial(update, a)(canvas))
它正在做与此完全相同的事情:

func = functools.partial(update, a)
result = func(canvas)
main.after(5000, result)
为了使
after
完成其工作,必须为其提供要调用的函数的引用。在您的代码中,实际上是立即调用它,然后在之后将结果传递给

由于您可以向
after
提供位置参数,这些参数将传递给您的命令,因此您可以像这样重写
after

main.after(5000, functools.partial(update, a), canvas)
不过,我不太明白您为什么认为需要
functools.partial
。您应该能够将其浓缩为:

main.after(5000, update, a, canvas)

你为什么使用导入时间?Time.sleep在tkinter中不起作用。我只是用它进行调试,但忘了删除它。非常感谢您的回复。我实施了您的更改,效果非常好。gui仍在更新中,但之后似乎工作得很好。再次感谢。