Python照片动画问题

Python照片动画问题,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我试图让一个图像在屏幕上滚动,直到它到达中间并停止。我怎样才能做到这一点?我在tkinter和PIL库中使用Python2.7 谢谢你的帮助 有了好的老特金特,这当然是可能的!这应该行得通,我还不能测试PIL的东西,但我没有测试它。按向左键移动图像 from Tkinter import * from PIL import Image, ImageTk class App: def __init__(self,master): self.xRes = 500

我试图让一个图像在屏幕上滚动,直到它到达中间并停止。我怎样才能做到这一点?我在tkinter和PIL库中使用Python2.7


谢谢你的帮助

有了好的老特金特,这当然是可能的!这应该行得通,我还不能测试PIL的东西,但我没有测试它。按向左键移动图像

from Tkinter import *
from PIL import Image, ImageTk

class App:
    def __init__(self,master):
        self.xRes = 500
        self.yRes = 500
        master.geometry(str(self.xRes)+"x"+str(self.yRes))
        #if you didnt have PIL (gif only): myImage = PhotoImage(file="image.gif") 
        myImage = ImageTk.PhotoImage(Image.open("image.jpg")) 
        self.photoFrame = Label(master,image = myImage,width = 300, height = 300)
        self.photoFrame.place(x=-310, y=0)
        self.photoFrame.image = myImage
        self.photoFrame.focus_set()
        self.photoFrame.bind("<Left>",self.animate)


    def moveImage1(self):
        cur = int(self.photoFrame.place_info()["x"])
        pWidth = str(self.photoFrame.cget("width"))
        print(pWidth)
        while cur != (self.xRes/2) - (int(pWidth)/2):
            cur = int(self.photoFrame.place_info()["x"])
            self.photoFrame.place(x=cur+2, y=0)
            print(cur)
            root.update()


    def animate(self,event):
        self.moveImage1()

root = Tk()
app = App(root)
root.mainloop()
从Tkinter导入*
从PIL导入图像,ImageTk
类应用程序:
定义初始(自我,主):
self.xRes=500
self.yRes=500
几何硕士(str(self.xRes)+“x”+str(self.yRes))
#如果您没有PIL(仅gif):myImage=PhotoImage(file=“image.gif”)
myImage=ImageTk.PhotoImage(Image.open(“Image.jpg”))
self.photoFrame=标签(母版,图像=myImage,宽度=300,高度=300)
self.photoFrame.place(x=-310,y=0)
self.photoFrame.image=myImage
self.photoFrame.focus_set()
self.photoFrame.bind(“,self.animate)
def moveImage1(自身):
cur=int(self.photoFrame.place_info()[“x”])
pWidth=str(self.photoFrame.cget(“宽度”))
打印(宽度)
而cur!=(self.xRes/2)-(int(pWidth)/2):
cur=int(self.photoFrame.place_info()[“x”])
自相框位置(x=cur+2,y=0)
打印(当前)
root.update()
def动画(自我、事件):
self.moveImage1()
root=Tk()
app=app(根目录)
root.mainloop()

如果您想添加更多动画,您可以建立更多的方法,如moveImage1,每个动画一个。那么,你想怎么叫就怎么叫。该方法获取标签小部件的当前x位置,然后将其递增2。然后,调用root.update()刷新窗口。如果您还需要什么,请告诉我。

下面是一个从画布左侧移动到中心的图像示例:

import Tkinter as tk

imagedata = '''
    R0lGODlhEAAQAMQZAMPDw+zs7L+/v8HBwcDAwLW1teLi4t7e3uDg4MLCwuHh4e7u7t/f38TExLa2
    tre3t7i4uL6+vu/v77q6uu3t7b29vby8vLm5ubu7u+3t7QAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
    ABkALAAAAAAQABAAAAWNYCaOZFlWV6pWZlZhTQwAyYSdcGRZGGYNE8vo1RgYCD2BIkK43DKXRsQg
    oUQiFAkCI3iILgCLIEvJBiyQiOML6GElVcsFUllD25N3FQN51L81b2ULARN+dhcDFggSAT0BEgcQ
    FgUicgQVDHwQEwc+DxMjcgITfQ8Pk6AlfBEVrjuqJhMOtA4FBRctuiUhADs=
'''

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        self.canvas = tk.Canvas(self)
        self.canvas.pack(side="bottom", fill="both", expand=True)

        self.image = tk.PhotoImage(data=imagedata)
        image_id = self.canvas.create_image(0,0, anchor="nw", image=self.image)

        self.move_to_center(image_id)

    def move_to_center(self, id):
        (x0,y0) = self.canvas.coords(id)
        if x0 < int(self.canvas.winfo_width()/2):
            self.canvas.move(id, 1,0)
        self.after(10, lambda id=id: self.move_to_center(id))

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
将Tkinter作为tk导入
imagedata=“”
R0lGODlhEAAQAMQZAMPDw+zs7L+/V8HBWCDAWLW1TELI4T47E3UDG4MLCWH4E7U7T/f38TExLa2
tre3t7i4uL6+vu/v77q6uu3t7b29vby8vLm5ubu7u+3T7QAAAAAAAAAAAACH5BAEA
ABKALAAAAAAAAAAAAAAAAAWNYCAOZFLWV6PWZLZHTQWAYYSDCGRZGYNE8VO1RGYCD2BIK43DKXRSQG
oUQiFAkCI3iILgCLIEvJBiyQiOML6GElVcsFUllD25N3FQN51L81b2ULARN+dhcDFggSAT0BEgcQ
FgUicgQVDHwQEwc+DxMjcgITfQ8Pk6AlfBEVrjuqJhMOtA4FBRctuiUhADs=
'''
类示例(tk.Frame):
定义初始化(self,*args,**kwargs):
tk.Frame.\uuuu init\uuuuu(self,*args,**kwargs)
self.canvas=tk.canvas(self)
self.canvas.pack(side=“bottom”,fill=“both”,expand=True)
self.image=tk.PhotoImage(数据=图像数据)
image\u id=self.canvas.create\u image(0,0,anchor=“nw”,image=self.image)
self.move\u到\u中心(图像\u id)
def移动到中心(自身,id):
(x0,y0)=self.canvas.coords(id)
如果x0
如果您发布一些您已经尝试过的代码片段,我们将不胜感激。我建议使用类似于
pygame
的东西,这使得这一点非常简单。不知道你为什么要用PIL:哦,很抱歉。我正在使用PIL,因为我认为这是将图像文件导入Python的唯一方法。我觉得这特别奇怪,我能用pygame实现吗?你可以使用
after
将图像移动一个单位,然后让方法使用
after
将自己安排在几十毫秒内再次运行,这取决于你希望它移动的速度。真的!我不确定它是否需要它,tkinter不能快速移动图像你说它不能快速移动图像是什么意思?你需要多快?我可以每隔几毫秒左右移动任意数量的像素。对于简单的动画,你可能会得到60帧或更多。谢谢大家的帮助,但是当我粘贴这段代码并添加我自己的图像文件时,窗口中什么都没有。我在干什么吗?