Ani Gif

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Hallo zusammen,

würde gerne ein animiertes Gif in meine Oberfläche einbringen.
Dies versuche ich mit:

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("Movie.gif",21)
Leider sieht das Gif nicht so aus, wie es aussehen sollte. Angefangen von der wirklich schlechten Qualität bis hin zu einem weißen statt schwarzen Hintergrund.
Lässt sich da was machen?
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe das selbst noch nicht probiert, aber die Tage warst du doch mit Qt5 zugange. Das ist fuer sowas viel besser geeignet. Hier zB ein Rezept, wie man das in C++ macht - das sollte sich problemlos uebersetzen lassen: https://stackoverflow.com/questions/324 ... tion-in-qt
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ulrich_G: Ich vermute mal Tk wird da einfach den entsprechenden Frame raus holen *ohne* alle anderen vorher zu rendern, das heisst das funktioniert so nur wenn in dem GIF tatsächlich mehrere komplette Bilder stecken und nicht nur die Abweichungen vom jeweils vorherigen Frame mit Transparenz wo beide Bilder gleich sind. Man könnte diese Optimierung aus dem Bild rausnehmen, aber dann kann man IMHO auch gleich mehrere Einzelbilder als PNG speichern.

Schlechte Qualität sollte vom Bild kommen und nicht von Tk. Wenn das Bild gute Qualität hat, wird es auch in guter Qualität angezeigt.

Das mit dem ``gif -index`` und auch PNG geht übrigens erst mit Tk 8.6. Es gibt aber noch aktuelle Linuxdistributionen bei denen Tk 8.5 ausgeliefert wird. Da muss man noch über das externe Pillow-Package gehen wenn man PNG verwenden will. Mit Pillow könnte man vielleicht auch komplette Einzelbilder aus ”optimierten” GIF-Animationen erstellen.

Das mit `update()` in einer Schleife würde ich nicht empfehlen. Die GUI sollte von einem Aufruf von `mainloop()` angetrieben werden. Wenn man in x Sekunden eine Aktion haben möchte, kann man das mit der `after()`-Methode auf Tk-Widgets erreichen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

@_deets__
Leider hab ich es bisher noch nicht mit dem QT Designer hinbekommen. Da fehlt mir wohl noch die Erfahrung.
Ein funktionierendes Beispiel würde mir da schon weiterhelfen. Ich werde mir mal dein C++ Beispiel ansehen und schauen ob ich daraus schlauer werde
Antworten