Tkinter.PhotoImage
を使用してアニメーションgifを再生しようとしましたが、成功していません。画像は表示されますが、アニメーションは表示されません。以下は私のコードです:
root = Tkinter.Tk()
photo = Tkinter.PhotoImage(file = "path/to/image.gif")
label = Tkinter.Label(image = photo)
label.pack()
root.mainloop()
ウィンドウに画像を表示し、それだけです。この問題はTkinter.Label
と関係があると考えていますが、よくわかりません。私は解決策を探しましたが、彼らはすべてPIL(Python Imaging Library)を使用するように言っており、それは私が使いたくないものです。
答えで、私はさらにいくつかのコードを作成しました(まだ動作しません...)、ここにあります:
from Tkinter import *
def run_animation():
while True:
try:
global photo
global frame
global label
photo = PhotoImage(
file = photo_path,
format = "gif - {}".format(frame)
)
label.configure(image = nextframe)
frame = frame + 1
except Exception:
frame = 1
break
root = Tk()
photo_path = "/users/zinedine/downloads/091.gif"
photo = PhotoImage(
file = photo_path,
)
label = Label(
image = photo
)
animate = Button(
root,
text = "animate",
command = run_animation
)
label.pack()
animate.pack()
root.mainloop()
すべてに感謝します! :)
Tkでアニメーションを自分で操作する必要があります。アニメーションgifは、1つのファイル内のいくつかのフレームで構成されます。 Tkは最初のフレームをロードしますが、画像の作成時にインデックスパラメーターを渡すことにより、異なるフレームを指定できます。例えば:
_frame2 = PhotoImage(file=imagefilename, format="gif -index 2")
_
すべてのフレームを別々のPhotoImageにロードし、タイマーイベントを使用して、表示されているフレームを切り替える場合(label.configure(image=nextframe)
)。タイマーの遅延により、アニメーションの速度を制御できます。フレームカウントを超えるとフレームの作成に失敗すること以外、画像内のフレーム数を提供するものはありません。
公式のWordについては photo Tkのマニュアルページを参照してください。
オブジェクトを作成せずに簡単な例を示します。
from tkinter import *
import time
import os
root = Tk()
frames = [PhotoImage(file='mygif.gif',format = 'gif -index %i' %(i)) for i in range(100)]
def update(ind):
frame = frames[ind]
ind += 1
label.configure(image=frame)
root.after(100, update, ind)
label = Label(root)
label.pack()
root.after(0, update, 0)
root.mainloop()