无法延时移动图像

时间:2013-11-17 19:54:43

标签: python python-2.7 canvas tkinter delay

我正在试图弄清楚如何在python中制作滚动图像,但是我遇到了一些延迟问题。我需要图像在画布渲染后移动,我还需要它以延迟时间移动。这是我目前的代码:

from Tkinter import *
import ImageTk
import time

def scrollToTop(imaget):
    for x in range(100, 20, -1):
        canvas.move(imaget, 0, -1)

t = Tk()
canvas = Canvas(t,height=256,width=256)
canvas.pack()

arrows = [1]
arrows[0] = ImageTk.PhotoImage(file="arrow.bmp")
image = canvas.create_image(20,100,image=arrows[0],tags="token")

t.mainloop();
scrollToTop(image);

我试过在scrollToTop()函数所在的地方玩游戏,我也试过time.delay(0.1),但都无济于事。我可以尝试像Update()函数那样测量从“游戏时间”变量传递的时间......

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先:主循环t.mainloop()一直运行,直到你关闭程序,因此在关闭程序后将运行t.mainloop()之后的每条指令。

您可以使用计时器每1秒(1000毫秒)调用scrollToTop(例如)

from Tkinter import *
import ImageTk
import time

def scrollToTop():
    print "I'm in scrollToTop()"
    canvas.move(image, 0, -1)
    t.after(1000, scrollToTop)

t = Tk()
canvas = Canvas(t,height=256,width=256)
canvas.pack()

arrows = [1]
arrows[0] = ImageTk.PhotoImage(file="arrow.bmp")
image = canvas.create_image(20,100,image=arrows[0],tags="token")
scrollToTop()

t.mainloop();

修改

t.after()需要没有()的函数名称,所以如果你需要运行带参数的函数,请使用lambda函数

from Tkinter import *
import ImageTk
import time

def scrollToTop(imaget):
    print "I'm in scrollToTop()"
    canvas.move(imaget, 0, -1)
    t.after(1000, lambda:scrollToTop(imaget))

t = Tk()
canvas = Canvas(t,height=256,width=256)
canvas.pack()

arrows = [1]
arrows[0] = ImageTk.PhotoImage(file="arrow.bmp")
image = canvas.create_image(20,100,image=arrows[0],tags="token")
scrollToTop(image)

t.mainloop();