Python - Reproducir Gif Animado

 
Vista:
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Reproducir Gif Animado

Publicado por Pepe (16 intervenciones) el 16/07/2017 14:32:20
Hola a todos,

Durante la ejecucion de mi codigo necesito que en un momento determinado se muestre un gif animado y continue corriendo el codigo. Una vez finalizada la ejecucion del codigo que se cierre el gif.

El caso es que si muestro el gif con PIL no se reproduce.

Si creo una ventana con tkinter y cargo el gif en un label, si consigo que se reproduzca, pero se me para la ejecucion del resto de codigo hasta que cierro la ventana.

Alguien puede darme alguna idea de como hacerlo?

Muchas gracias de antemano,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Reproducir Gif Animado

Publicado por Pepe (16 intervenciones) el 16/07/2017 18:47:35
Lo he conseguido solucionar con la siguiente ñapa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import tkinter as tk
from PIL import Image, ImageTk
from itertools import count
import threading
 
 
class ImageLabel(tk.Label):
 
    def load(self, im: object) -> object:
        if isinstance(im, str):
            im = Image.open(im)
        self.loc = 0
        self.frames = []
 
        try:
            for i in count(1):
                self.frames.append(ImageTk.PhotoImage(im.copy()))
                im.seek(i)
        except EOFError:
            pass
 
        try:
            self.delay = im.info['duration']
        except:
            self.delay = 100
 
        if len(self.frames) == 1:
            self.config(image=self.frames[0])
        else:
            self.next_frame()
 
    def unload(self):
        self.config(image=None)
        self.frames = None
 
    def next_frame(self):
        if self.frames:
            self.loc += 1
            self.loc %= len(self.frames)
            self.config(image=self.frames[self.loc])
            self.after(self.delay, self.next_frame)
 
def abrirGif():
    root = tk.Tk()
    root.title = 'Comparando Imagenes'
    lbl = ImageLabel(root)
    lbl.pack()
    lbl.load(os.getcwd() + 'GIFANIMADO.gif')
    root.mainloop()
 
t = threading.Thread(target = abrirGif)
t.daemon = True
t.start()
 
# AQUI EL RESTO DEL CODIGO QUE SIGUE CORRIENDO
 
t.join(0)

Si alguien tiene alguna idea para hacerlo mas sencillo o mas depurado se agradecen todas las ideas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Reproducir Gif Animado

Publicado por xve (1646 intervenciones) el 16/07/2017 20:23:39
Gracias por compartirlo Pepe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Hector

Reproducir Gif Animado

Publicado por Hector (1 intervención) el 09/03/2021 23:11:09
Estimado

Me sirvió mucho tu código para desplegar un gif mientras se ejecuta el código principal el cual procesa gran cantidad de datos y que se demora casi un minuto. El problema que tengo ahora es que al hacer el .exe con pyinstaller, siempre tengo que tener el gif en el disco duro (al ejecutar el exe. la aplicación va al disco a buscar el gif), y me gustaría que el gif estuviera embeido en el código. Estoy intentando con usar: gif=base64.encodebytes(open(icon,"rb").read()) para transformar el gif a Bytes, y luego usarlo con:
GifImage=tkinter.PhotoImage(master=root, data=gif)
tkinter.Label(image=GifImage).pack()

pero aún no lo he podido lograr.... me podrías ayudar!?? Slds.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar