Tkinter 用于为画布对象设置动画移动的方法

Tkinter 用于为画布对象设置动画移动的方法,tkinter,python-3.4,tkinter-canvas,Tkinter,Python 3.4,Tkinter Canvas,我一直在努力学习如何从谷歌移动画布项目,但是大多数地方显示的方法似乎对我来说都不起作用。现在我只是想让球在1秒内从屏幕的一侧移动到另一侧 从tkinter导入* root=Tk() c=画布(根,宽度=200,高度=100) c、 包() ball=c.创建椭圆(0,25,50,75) 对于范围(25)内的i: c、 移动(球,6,0) 根。之后(40) root.mainloop() 当运行时,这似乎会在打开窗口之前移动球,但是如果我首先调用mainloop,窗口会打开,但球不会移动 不确定

我一直在努力学习如何从谷歌移动画布项目,但是大多数地方显示的方法似乎对我来说都不起作用。现在我只是想让球在1秒内从屏幕的一侧移动到另一侧

从tkinter导入*
root=Tk()
c=画布(根,宽度=200,高度=100)
c、 包()
ball=c.创建椭圆(0,25,50,75)
对于范围(25)内的i:
c、 移动(球,6,0)
根。之后(40)
root.mainloop()
当运行时,这似乎会在打开窗口之前移动球,但是如果我首先调用mainloop,窗口会打开,但球不会移动


不确定它是如何设置的,但如果有人知道这将是非常棒的。

基本思想是在之后使用
创建动画循环。最简单的形式是这样的:

def animate():
    c.move(ball, 6, 0)
    root.after(33, animate)
这将使对象移动6个像素,并使其自身在33毫秒内再次运行。更改该数字(本例中为33)将确定项目移动的速度。33ms大约是30fps

当然,您需要添加一个检查,查看项目是否在屏幕外,以便停止循环或将项目移回左侧边缘。另外,您不应该依赖全局变量,但我希望删除尽可能多的额外代码,以便您可以看到函数的基本性质

下面是一个基于问题代码的完整工作示例:

from tkinter import *

def animate():
    c.move(ball, 6, 0)
    root.after(33, animate)

root = Tk()
c = Canvas(root, width = 200, height = 100)
c.pack()
ball = c.create_oval(0, 25, 50, 75)
animate()
root.mainloop()

事实上,现在我正试图将这个方法实现到我的其他代码中,我该如何制作一个只运行有限时间的函数,比如animate?我尝试定义“animate(time)”,并将其设置为“root.after(33,animate(time-1)),因此它将是一个有限的循环函数,但是它的问题与之前在打开window@user2627127:我无法在评论框中回答这个问题。搜索stackoverflow,有很多关于after使用的问题和答案。