Animiertes GIF

Fragen zu Tkinter.
Antworten
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

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
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Also soweit ich weiß sind Grafikanimationen nicht direkt implementiert. Erstell aus den einzelnen Animationsschritten Einzeldateien und lass die über Tkinter periodisch anzeigen.
I am not part of the allesburner. I am the [url=http://allesburner.de]allesburner[/url].
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

@Redprince:
Blöde Idee: Könnte man PIL nicht mit TKinter so verheiraten das GIFs angezeigt werden?
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

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
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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:
Zuletzt geändert von Andy am Samstag 6. Oktober 2007, 09:55, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und wer in diesem Quelltext auf Anhieb die Leerzeichen richtig setzt, dass daraus auch gültiger Code wird, bekommt einen Keks. :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

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).
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Wie realisiert man denn z.B. son Prozent-Balken für die Statusanzeige?
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

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).
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

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.
Antworten