0

画像が中央に到達して停止するまで、画像を画面上でスクロールさせようとしています。どうすればこれを達成できますか?私はtkinterとPIL libでpython 2.7を使用しています。

助けてくれてありがとう!!!

4

2 に答える 2

1

古き良き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()

さらにアニメーションを追加したい場合は、アニメーションごとに 1 つずつ、moveImage1 などのメソッドをさらに作成します。あとは好きなように呼んでください。このメソッドは、Label ウィジェットの現在の x 位置を取得し、それを 2 ずつ増やします。次に、root.update() を呼び出してウィンドウを更新します。追加のものが必要な場合はお知らせください。

于 2013-07-09T01:43:04.003 に答える
0

キャンバスの左から中央に移動する画像の例を次に示します。

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()
于 2013-07-09T16:00:28.107 に答える