Seite 1 von 1

Animiertes GIF

Verfasst: Donnerstag 4. Oktober 2007, 16:36
von The Spirit
HI Leute.
Ich hab da mal ne frage und leider mit der Suche nix gefunden.
Ich hab ein nen Code welcher ein komplettes Messsetup bildet und mir Bauteile ausmisst.
Dies dauert bis zu 10 min.
Da ich nicht immer das Bedienen des Programms übernehmen soll, sonder auch leute die von Python oder dergleichen keine Ahnung haben, wollte ich während es messens ein kleines Fenster mit tkinter erscheinen lasse in dem ein animiertes gif erscheint, wo wie der 'wait-cursor' sich bewegt und somit signalisiert das das Programm noch läuft.
Bisher kommt zum schluss nur ein Fenster was sagt, das er fertig ist.
Gibt es ne möglichkeit, ein animiertes Gif anzuzeigen?

Mit

Code: Alles auswählen

from Tkinter import *

root = Tk()
pi = PhotoImage(file='wait1.gif')

background = Label(root, image=pi)
background.pack()

root.mainloop() 
zeigt er mir nur das erste Bild der Sequenz an.

Thx

Verfasst: Donnerstag 4. Oktober 2007, 18:35
von Redprince
Also soweit ich weiß sind Grafikanimationen nicht direkt implementiert. Erstell aus den einzelnen Animationsschritten Einzeldateien und lass die über Tkinter periodisch anzeigen.

Verfasst: Donnerstag 4. Oktober 2007, 20:43
von poker
@Redprince:
Blöde Idee: Könnte man PIL nicht mit TKinter so verheiraten das GIFs angezeigt werden?

Verfasst: Freitag 5. Oktober 2007, 10:04
von The Spirit
Redprince hat geschrieben:Also soweit ich weiß sind Grafikanimationen nicht direkt implementiert. Erstell aus den einzelnen Animationsschritten Einzeldateien und lass die über Tkinter periodisch anzeigen.
hatte ich mir auch schon überlegt, aber ist meiner meinung nach viel zu aufwändig im verhältnis zum ergebnis

Verfasst: Freitag 5. Oktober 2007, 18:35
von Andy
poker hat geschrieben:@Redprince:
Blöde Idee: Könnte man PIL nicht mit TKinter so verheiraten das GIFs angezeigt werden?
The Spirit hat geschrieben:hatte ich mir auch schon überlegt, aber ist meiner meinung nach viel zu aufwändig im verhältnis zum ergebnis
Da bin ich einfach mal anderer Meinung:

Code: Alles auswählen

##Image Sequences
##The Python Imaging Library contains some basic support for image sequences (also called
##animation formats). Supported sequence formats include FLI/FLC, GIF, and a few
##experimental formats. TIFF files can also contain more than one frame.
##When you open a sequence file, PIL automatically loads the first frame in the sequence.
##You can use the seek and tell methods to move between different frames:
##Example: Reading sequences
import Image

im = Image.open("animation.gif")
im.seek(1) # skip to the second frame

try:
    while 1:
        im.seek(im.tell()+1)
        # do something to im
except EOFError:
    pass # end of sequence

##As seen in this example, you'll get an EOFError exception when the sequence ends.
##Note that most drivers in the current version of the library only allow you to seek to the
##next frame (as in the above example). To rewind the file, you may have to reopen it.
##The following iterator class lets you to use the for-statement to loop over the sequence:
##Example: A sequence iterator class

class ImageSequence:
    def __init__(self, im):
        self.im = im
    def __getitem__(self, ix):
        try:
            if ix:
                self.im.seek(ix)
            return self.im
        except EOFError:
            raise IndexError # end of sequence
for frame in ImageSequence(im):
    # ...do something to frame...
Manchmal hilft es kurz in die Doku zu schauen. 8)

Gruß Andi

EDIT: Garnicht gemerkt, dass die Leerz. äh Tabs nicht richtig kopiert wurden. Danke Leonidas. Hab´s geändert. :wink:

Verfasst: Freitag 5. Oktober 2007, 22:03
von Leonidas
Und wer in diesem Quelltext auf Anhieb die Leerzeichen richtig setzt, dass daraus auch gültiger Code wird, bekommt einen Keks. :P

Verfasst: Samstag 6. Oktober 2007, 09:57
von Andy
Leonidas hat geschrieben:Und wer in diesem Quelltext auf Anhieb die Leerzeichen richtig setzt, dass daraus auch gültiger Code wird, bekommt einen Keks. :P
Bekomm´ich ketz mein Jeks???? MMMmmmhhhh :D

Verfasst: Samstag 6. Oktober 2007, 16:08
von schlangenbeschwörer
Unabhängig vom eigentlichen Problem könnte man auch den Sanduhr zeiger und tix.Meter verwenden, da weiß man direkt, wielangs noch dauert (wenns möglich ist).

Verfasst: Montag 8. Oktober 2007, 08:14
von skypa
Wie realisiert man denn z.B. son Prozent-Balken für die Statusanzeige?

Verfasst: Montag 8. Oktober 2007, 12:10
von schlangenbeschwörer
schlangenbeschwörer hat geschrieben:tix.Meter
Du hast eine Funktion mit einer Schleife mit Zähler und in jedem loop sagst du deinem Balken, der die Zahl der Gesamtloops kennt, den Stand des Zählers woraufhin der Balken wächst (oder schrumpft).

Verfasst: Montag 15. Oktober 2007, 07:01
von Michael Schneider
Hi!
schlangenbeschwörer hat geschrieben:
schlangenbeschwörer hat geschrieben:tix.Meter
Du hast eine Funktion mit einer Schleife mit Zähler und in jedem loop sagst du deinem Balken, der die Zahl der Gesamtloops kennt, den Stand des Zählers woraufhin der Balken wächst (oder schrumpft).
Ist das nur Theorie oder hast Du mal ein Beispiel für Leute, die noch nie mit Tix gearbeitet haben? ;-)

Gruß,
Michel

Verfasst: Montag 15. Oktober 2007, 13:31
von schlangenbeschwörer
Klar!
http://python.developpez.com/faq/?page=TixMeter hat geschrieben:

Code: Alles auswählen

import Tix
root = Tix.Tk()
meter = Tix.Meter(root, value=0.)
meter.pack()
def go():
    for i in range(10000):
        meter.config(value=float(i)/10000)
        meter.update()
    
btn = Tix.Button(root, text = 'Go', command = go)
btn.pack()
root.mainloop()
Ich finde, das ist schön simpel und sagt eigentlich alles.
Das Problem ist nur, das es nur klappt, wenn man weiß, wie viele Schritte man braucht und es ist auch etwas blöd, wenn der balken nicht gleichmäßig schnell wächst. Aber sonst ne feine Sache.