Python - Reproducir Gif Animado

   
Vista:
Imágen de perfil de Pepe

Reproducir Gif Animado

Publicado por Pepe (15 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

Reproducir Gif Animado

Publicado por Pepe (15 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
2
Comentar
Imágen de perfil de xve

Reproducir Gif Animado

Publicado por xve (1533 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
Revisar política de publicidad