Tkinter-Bilder nach einander anzeigen lassen.

Fragen zu Tkinter.
Antworten
pcelch
User
Beiträge: 1
Registriert: Mittwoch 25. September 2013, 15:02

Hi Ich bin ein ziemlicher Anfänger was Tkinter betrift und Python auch :oops:
Ich möchte nun erreichen das man nach einander 3 bilder ausgegeben bekommt:

Code: Alles auswählen

from tkinter import *
import time

def warten(s):
    time.sleep(s)




main=Tk(className="Klick die Kreise")
main.geometry("800x550")

bild1=PhotoImage(file="logo1.gif")
Label(main, image=bild1).pack()
warten(3)

bild2=PhotoImage(file="logo2.gif")
Label(main, image=bild2).pack()
warten(3)

bild3=PhotoImage(file="logo3.gif")
Label(main, image=bild3).pack()
    
main.mainloop()
aber irgendwie wartet er jetzt bevor er das tk überhaupt startet und dann zeigt er nur das erste bild an :C bitte um hilfe danke :DD
Zuletzt geändert von Anonymous am Mittwoch 25. September 2013, 15:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@pcelch: Die GUI wird erst angezeigt und ist funktionsfähig wenn die Hauptschleife des GUI-Toolkits läuft. Und lineare Programmierung funktioniert auch nicht weil GUI-Toolkits in aller Regel ereignisbasiert arbeiten. Das heisst Du kannst keinen länger laufenden Code mehr schreiben, sondern schreibst Funktionen/Methoden, die von der GUI bei bestimmten Ereignissen wie „Benutzer klickt auf eine Schaltfläche” aufgerufen werden. In diesem Fall müsstest Du mit der `after()`-Methode arbeiten, der man eine Zeit in Millisekunden und eine Funktion (und optional Argumente für die Funktion) übergibt. Tkinter ruft diese Funktion dann nach der angegeben Anzahl von Millisekunden auf. Dann kannst Du kurz etwas machen, zum Beispiel ein Bild anzeigen und einen weiteren Funktionsaufruf mit `after()` veranlassen.

Da man bei diesem Programmiermodell „Funktionen” mit gemeinsamen Zustand hat, sich also Werte über verschiedene Funktionsaufrufe hinweg merken muss, setzt GUI-Programmierung in der Regel objektorientierte Programmierung (OOP) voraus. Also das schreiben von eigenen Klassen. Das sollte man IMHO drauf haben bevor man mit GUIs anfängt.

Edit: `warten` hätte man kürzer definieren können: ``warten = time.sleep``.
Antworten