使用Tkinter在python中移动图像

use*_*345 1 python tkinter

伙计我正在研究一个需要使用Tkinter(canvas)在python中移动图像的代码这给我带来了麻烦.图像正在显示但不移动.

from Tkinter import *
root = Tk()
root.title("Click me!")
def next_image(event):
    global toggle_flag
    global x, y, photo1
    # display photo2, move to right, y stays same
    canvas1.create_image(x+10, y, image=photo1)
    canvas1.create_image(x+20, y, image=photo1)           
    canvas1.create_image(x+30, y, image=photo1)
    canvas1.create_image(x+40, y, image=photo1)
    canvas1.create_image(x+50, y, image=photo1)
    canvas1.create_image(x+60, y, image=photo1)
    canvas1.create_image(x+70, y, image=photo1)
    canvas1.create_image(x+100, y, image=photo1)

image1 = "C:\Python26\Lib\site-packages\pygame\examples\data\ADN_animation.gif"   #use some random gif
photo1 = PhotoImage(file=image1)
# make canvas the size of image1/photo1
width1 = photo1.width()
height1 = photo1.height()
canvas1 = Canvas(width=width1, height=height1)
canvas1.pack()
# display photo1, x, y is center (anchor=CENTER is default)
x = (width1)/2.0
y = (height1)/2.0
canvas1.create_image(x, y, image=photo1)
canvas1.bind('<Button-1>', next_image)  # bind left mouse click
root.mainloop() 
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 5

Canvas提供move方法.参数是您要移动的项目,相对于前一个位置的偏移x偏移量.

您需要保存返回值以将create_image其传递给move方法.

还要确保画布是可扩展的(pack(expand=1, fill=BOTH)在以下代码中)

from Tkinter import *

root = Tk()

def next_image(event):
    canvas1.move(item, 10, 0) # <--- Use Canvas.move method.

image1 = r"C:\Python26\Lib\site-packages\pygame\examples\data\ADN_animation.gif"
photo1 = PhotoImage(file=image1)
width1 = photo1.width()
height1 = photo1.height()
canvas1 = Canvas(width=width1, height=height1)
canvas1.pack(expand=1, fill=BOTH) # <--- Make your canvas expandable.
x = (width1)/2.0
y = (height1)/2.0
item = canvas1.create_image(x, y, image=photo1) # <--- Save the return value of the create_* method.
canvas1.bind('<Button-1>', next_image)
root.mainloop() 
Run Code Online (Sandbox Code Playgroud)

根据评论更新

使用after,您可以安排在给定时间后调用函数.

def next_image(event=None):
    canvas1.move(item, 10, 0)
    canvas1.after(100, next_image) # Call this function after 100 ms.
Run Code Online (Sandbox Code Playgroud)