我正在试图弄清楚如何在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()
函数那样测量从“游戏时间”变量传递的时间......
提前致谢!
答案 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();