连续移动矩形后达到 Tkinter 最大递归深度



我试图让一个矩形像 while 循环一样连续移动,但是每当我运行程序时,它都会说我已经立即达到了最大递归深度,有什么方法可以解决这个问题吗?

法典:

from tkinter import *
def move(rect):
canvas.move(rect, 10, 0)
root.after(10, move(rect))
root = Tk()
root.overrideredirect(1)
root.geometry("400x400")
canvas = Canvas(root, width=400, height=400)
rect = canvas.create_rectangle(0, 0, 50, 50, fill = "red")
canvas.pack()
root.after(10, move(rect))
root.mainloop()

正如@stovfl所说,你不应该在函数中使用.after()方法。

相反,这将是您的代码:

from tkinter import *
root = Tk()
root.geometry("400x400")
canvas = Canvas(root, width=400, height=400)
canvas.pack()
def move(rectangle):
canvas.move(rect, 10, 0)
root.after(10, lambda: move(rect))
rect = canvas.create_rectangle(0, 0, 50, 50, fill = "red")
root.after(10, lambda: move(rect))
root.mainloop()

或者,如果您出于某种原因想以不同的方式执行此操作,

from tkinter import *
root = Tk()
root.geometry("400x400")
canvas = Canvas(root, width=400, height=400)
canvas.pack()
def move(rectangle):
canvas.move(rect, 10, 0)
root.after(10, lambda: move(rect))
rect = canvas.create_rectangle(0, 0, 50, 50, fill = "red")
move(rect)
root.mainloop()

它们都完美地工作,尽管前者更一致(至少在我看来(。

希望这有帮助!

最新更新