我试图让图像在屏幕上滚动,直到它到达中间并停止。我怎样才能做到这一点?我将 python 2.7 与 tkinter 和 PIL 库一起使用。
谢谢您的帮助!!!
我试图让图像在屏幕上滚动,直到它到达中间并停止。我怎样才能做到这一点?我将 python 2.7 与 tkinter 和 PIL 库一起使用。
谢谢您的帮助!!!
好的老 tkinter 肯定有可能!这应该可行,无法测试 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()
如果你想添加更多的动画,你会建立更多的方法,比如 moveImage1,每个动画一个。然后,随心所欲地称呼他们。该方法获取 Label 小部件的当前 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()