"Video" funktioniert nur in IDLE

Fragen zu Tkinter.
Antworten
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Nothing but Python und ich haben wieder ein Problem mit unserem Programm, Virtual Heidelberg:
In der Methode unten soll dreimal 0,2 Sekunden gewartet und eine andere Methode, die ein neues Bild lädt, ausgeführt werden(Deswegen "Video").
Wird das Programm in IDLE ausgeführt, funktioniert alles.
Wenn es aber einfach durch einen Doppelklick geöffnet wird, erscheint nur bei der dritten Drehung ein neues Bild.
Warum funktioniert es nur in IDLE? :?:

Code: Alles auswählen

def vid_nach_rechts(self):
        for i in range (3):
            print("Drehe um 30 Grad nach rechts!")
            time.sleep(0.2)
            self.nach_rechts()
            

Code: Alles auswählen

def nach_rechts(self):
        if self.drehposition != 11:
            self.drehposition = self.drehposition + 1
        else:
            self.drehposition = 0
        testvar = self.dictionary_start[self.bildliste[self.bildposition]]
        self.bild = PhotoImage(file=self.dictionaryliste[testvar][self.drehposition])
        self.bildupdate()
Benutzeravatar
Nothing but Python
User
Beiträge: 12
Registriert: Montag 15. August 2011, 18:24

Auch wenn man in vid_nach_rechts()

Code: Alles auswählen

nach_rechts()
durch den Code dieser Funktion ersetzt,
funktioniert das "Video" nur im IDLE.

EDIT:Bei einem anderem Problem im Code hat es dann funktioniert! :K
Fail quickly and try except!
Benutzeravatar
Nothing but Python
User
Beiträge: 12
Registriert: Montag 15. August 2011, 18:24

:?:
Fail quickly and try except!
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Ich wollte nochmal fragen, ob irgendjemand weiß, woran es liegt :?:
BlackJack

@Krabman318: Solange der Code in der `vid_nach_rechts()`-Methode ausgeführt wird, ist die GUI-Hauptschleife nicht aktiv. Die hat die Methode ja wahrscheinlich aufgerufen und läuft erst weiter wenn die Methode zurück kehrt. Und dann aktualisiert sie erst die Anzeige. Und das dann mit dem Bild was zu dem Zeitpunkt das letzte war, welches gesetzt wurde.

Du müsstest also entweder die Schleife mit dem `sleep()` durch mehrfache Aufrufe von einer Methode durch die `after()`-Methode ersetzen, oder in der Schleife nach jedem Bild mit `update_idletasks()` dafür sorgen, dass die GUI aktualisiert wird.
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Vielen Dank!
Mit update_idletasks() funktioniert es! :mrgreen:
Benutzeravatar
Nothing but Python
User
Beiträge: 12
Registriert: Montag 15. August 2011, 18:24

Danke :mrgreen:
Fail quickly and try except!
Antworten