Seite 1 von 1

Ani Gif

Verfasst: Donnerstag 28. Juni 2018, 10:33
von Ulrich_G
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?

Re: Ani Gif

Verfasst: Donnerstag 28. Juni 2018, 10:57
von __deets__
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

Re: Ani Gif

Verfasst: Donnerstag 28. Juni 2018, 11:11
von __blackjack__
@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.

Re: Ani Gif

Verfasst: Donnerstag 28. Juni 2018, 11:34
von Ulrich_G
@_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