Seite 1 von 1
Animated gif in Tkinter
Verfasst: Freitag 12. Juni 2015, 13:23
von AndiArbeit
Guten Tag liebes Forum,
ich arbeite momentan an einem Projekt indem ich verschiedene GIFS in TKinter abspielen möchte.
Hierzu mein Code.
In OpenSuse läuft das ganze so wie ich möchte, allerdings benötige ich dieses Tool in Windows und da wird zwar das TKInter Fenster angezeigt jedoch nicht die einzelnen Bilder.
Vielen Dank im Voraus für eure Hilfe
Code: Alles auswählen
import os
import Tkinter as tk
import time
def gifoeffnen(name,gifnr) :
giffenster = tk.Tk()
label = tk.Label()
label.pack()
counter = 0
while counter < gifnr :
photo = tk.PhotoImage(file=name, format="gif -index " + str(counter))
label.config(image = photo)
time.sleep(0.05)
giffenster.update()
counter += 1
if counter > gifnr :
giffenster.destroy()
gifoeffnen("test.gif",21)
Re: Animated gif in Tkinter
Verfasst: Freitag 12. Juni 2015, 14:30
von AndiArbeit
Entschuldigt Bitte, das Script läuft auf beiden Systemen so. Der Fehler lag in meinem Script.
Schönes Wochenende
Re: Animated gif in Tkinter
Verfasst: Freitag 6. September 2019, 16:04
von Dynojezz
Dein Script hat mir grade sehr geholfen

vielen Dank!
Re: Animated gif in Tkinter
Verfasst: Freitag 6. September 2019, 16:20
von __blackjack__
Wobei das nicht sauber ist das ohne `mainloop()` zu machen. Damit kann man sich bei etwas umfangreicheren Anwendungen subtile Probleme einfangen und es skaliert natürlich nicht, weil man die Hauptschleife nur *einmal* selbst nachprogrammieren kann.
Re: Animated gif in Tkinter
Verfasst: Sonntag 22. September 2019, 21:15
von __blackjack__
Mal auf dem normalen Weg mit Tk-Hauptschleife:
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
def show_frame(label, gif_filename, index, max_index):
if index <= max_index:
image = tk.PhotoImage(file=gif_filename, format=f"gif -index {index}")
label["image"] = image
label.image = image
label.after(50, show_frame, label, gif_filename, index + 1, max_index)
else:
label.quit()
def show_animation(gif_filename, max_index):
root = tk.Tk()
label = tk.Label(root)
label.pack()
show_frame(label, gif_filename, 0, max_index)
root.mainloop()
if __name__ == "__main__":
show_animation("test.gif", 79)
Re: Animated gif in Tkinter
Verfasst: Donnerstag 6. August 2020, 19:45
von timm4444
Hallo, es ist schon länger her das hier was geschrieben wurde, aber ich würde mich trotzdem über eine Antwort freuen.
Ich habe den obenstehenden Code ausprobiert, aber das gif spielt sich nur einmal ab und dann kommt folgende Meldung:
Ich hoffe ihr könnt mir helfen wo der Fehler liegt.
Ich benutze Python Version 3.8.5 und habe Windows 10.
Re: Animated gif in Tkinter
Verfasst: Donnerstag 6. August 2020, 20:24
von Sirius3
Dann stimmt halt die Anzahl der Bilder nicht, und wenn Du Wiederholung willst, dann mußt Du den Index wieder auf 0 setzen.
Re: Animated gif in Tkinter
Verfasst: Dienstag 11. August 2020, 08:52
von timm4444
@Sirius3 Kannst du bitte ein Beispiel schreiben.
Re: Animated gif in Tkinter
Verfasst: Dienstag 11. August 2020, 09:18
von Sirius3
Wo ist denn konkret das Problem? Dass Du die Laufweite Deines Indexes nicht korrekt zählst, sollte doch ein einfach zu behebender Fehler sein.
Re: Animated gif in Tkinter
Verfasst: Dienstag 11. August 2020, 09:24
von sparrow
@timm4444: Was genau verstehst du denn nicht? Es gibt ja eine Funktion, die brauch die Parameter "index" und "max_index". Und max_index darf natürlich nicht größer sein als die Anzahl der Bilder, die in dem animated Gif stecken. Und wenn das Ding in einer Dauerschleife laufen soll, dann musst du den Index - also das Bild, das gerade angezeigt wird, natürlich nach dem letzten Bild wieder auf 0 setzen.
Re: Animated gif in Tkinter
Verfasst: Freitag 14. August 2020, 07:13
von timm4444
@sparrow: Danke, jetzt habe ich es verstanden.
