Comment puis-je insérer une image GIF animée dans Tkinter. Est-ce possible avec les fonctions de PIL ?
Merci à tous pour votre aide.
![]()
Comment puis-je insérer une image GIF animée dans Tkinter. Est-ce possible avec les fonctions de PIL ?
Merci à tous pour votre aide.
![]()
Avec pil sur cette page là tu a un exemple de code pour extraire une à une les différentes frames d'une images animée (c'est dans la partie "Image Sequences"):
http://www.pythonware.com/library/pil/handbook/introduction.htm
J'avais essayé il y a déjà un bon moment sans parvenir à un résultat satisfaisant notamment parce que pour bon nombre de gifs les frames ne sont pas toutes importées correctement, il y avait un grand nombre de bugs genre des frames en partie ou totalement noires ou blanches. Si toutefois çà marche pour toi après il faudra encore extraire la durée correcte de chaque frame du fichier (à priori c'est possible, c'est dans une liste d'infos que tu peut obtenir via une commande que j'ai totalement oubliée depuis le temps), et après il ne restera qu'à afficher la première frame à un endroit donné, après tant de millisecondes (temps de la 1ère frame) tu l'efface et tu affiche tu affiche la 2e à la même place, etc etc (çà çà ne pose pas trop de problèmes). Le mieux que j'était arrivé à faire c'était un gif qui marchait correctement mais avec des frames parfois buguées et un temps qui ne correspondait pas à l'original.
S'il existe un moyen plus simple d'y arriver je ne le connais pas mais çà m'intéressserait aussi de le savoir.
Voici le résultat de mes premiers essais. Bien qu' imparfait cela fonctionne pour un GIF à 2 frames...
...et merci à qui proposera mieux.
edité par Guigui_: ce sont les balises [Code] qu'il faut utiliser et non [Quote]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from Tkinter import * import Image import ImageTk fen=Tk() can=Canvas(fen,width=500,height=300,bg='ivory') can.pack() def change_image_2(): global image2 im = Image.open("Mon_GIF_Anime.gif") im.seek(0) image2=ImageTk.PhotoImage(im) can.delete(ALL) can.create_image(100,100,image =image2) can.after(180,change_image_1) def change_image_1(): global image1 im = Image.open("Mon_GIF_Anime.gif") im.seek(1) image1=ImageTk.PhotoImage(im) can.delete(ALL) can.create_image(100,100,image =image1) can.after(180,change_image_2) can.after(180,change_image_1) fen.mainloop()
peut être qu'avec les librairie permettant d'afficher des pages html, on pourrait afficher un gif animé sans le décomposer.
est ce une voie........
je débute!
Partager