Воспроизведение анимации в GIF с помощью Tkinter [дубликат]
этот вопрос уже есть ответ здесь:
Я пытался играть в анимированный gif с помощью Tkinter.PhotoImage
, но не видел никакого успеха. Он отображает изображение, но не анимацию. Ниже приведен мой код:
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()
Спасибо за все! :)
2 ответов
вы должны сами управлять анимацией в Tk. Анимированный GIF состоит из нескольких кадров в одном файле. Tk загружает первый кадр, но вы можете указать разные кадры, передав параметр индекса при создании изображения. Например:
frame2 = PhotoImage(file=imagefilename, format="gif -index 2")
Если вы загружаете все кадры в отдельные фотоизображения, а затем используете события таймера для переключения показываемого кадра (label.configure(image=nextframe)
). Задержка на таймере позволяет управлять скоростью анимации. Ничто не предоставляются дайте вам количество кадров в изображении, кроме того, что он не может создать кадр, как только вы превысите количество кадров.
посмотреть фото страница руководства 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()