python animation tkinter gif

python - Reproducir animaciones en GIF con Tkinter



animation (2)

Esta pregunta ya tiene una respuesta aquí:

He estado tratando de reproducir un gif animado usando Tkinter.PhotoImage , pero no he tenido ningún éxito. Muestra la imagen, pero no la animación. El siguiente es mi código:

root = Tkinter.Tk() photo = Tkinter.PhotoImage(file = "path/to/image.gif") label = Tkinter.Label(image = photo) label.pack() root.mainloop()

Muestra la imagen en una ventana, y eso es todo. Estoy pensando que el problema tiene algo que ver con Tkinter.Label pero no estoy seguro. He buscado soluciones, pero todas me dicen que use PIL (Python Imaging Library), y es algo que no quiero usar.

Con la respuesta, creé un poco más de código (que todavía no funciona ...), aquí está:

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()

¡Gracias por todo! :)


Aquí hay un ejemplo más simple sin crear un objeto:

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()


Tienes que conducir la animación tú mismo en Tk. Un gif animado consta de varios cuadros en un solo archivo. Tk carga el primer fotograma, pero puede especificar diferentes fotogramas pasando un parámetro de índice al crear la imagen. Por ejemplo:

frame2 = PhotoImage(file=imagefilename, format="gif -index 2")

Si carga todos los marcos en PhotoImages separadas y luego usa eventos de temporizador para cambiar el marco que se muestra ( label.configure(image=nextframe) ). El retraso en el temporizador le permite controlar la velocidad de la animación. No se proporciona nada para proporcionarle el número de fotogramas en la imagen, salvo que no puede crear un fotograma una vez que excede el número de fotogramas.

Consulte la página del manual de la photo Tk para la palabra oficial.