Seite 1 von 1
Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 20:39
von raiminator
Abend,
ich hätte da mal eine Frage zu time.sleep()
Ein Button (Tkinter) soll grün eingefärbt werden und danach soll 2 Sekunden gewartet werden. Das Einfärben geschieht aber erst nach den 2 Sekunden.
Der Code an der Stelle:
Wundert mich ziemlich weil der Funktionsaufruf von setGreen() vor dem von time.sleep() ist.
Schonmal danke für Hilfe,
Grüße raiminator
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 20:53
von deets
So funktionieren GUIs nicht. Aenderungen im Aussehen werden immer erst bei erreichen des main-loop durchgefuehrt. Deshalb muss man mit Timern arbeiten. Da du nicht verraetst, welches GUI-Framework du benutzt (kleiner Hinweis... es gibt fuer die diversen spezielle Unterforen) kann man dir da auch nicht detaillierter helfen.
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 20:56
von raiminator
dass es die Unterforen gibt weiß ich, ich dachte nur das hätte jetzt mehr mit dem time.sleep zu tun.
Außerdem habe ich geschrieben dass ich Tkinter benutze

Die mainloop wurde auch schon erreicht, das ganze steht in einer Funktion drin die von einem Button aufgerufen wird.
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 21:09
von deets
Ah, verzeih, dann habe ich nicht genau genug gelesen. Die Funktion die du suchst ist "after". Damit startest du den Code der nach den 2 Sekunden ausgefuehrt werden soll.
Und wie denkst du soll denn der mainloop erreicht werden, wenn sleep wartet?
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 21:12
von BlackJack
@raiminator: Die Hauptschleife wertet die Benutzerinteraktion aus und ruft Deine Funktion auf wenn die Schaltfläche gedrückt wurde. Und so lange Deine Funktion läuft, und nicht wieder zur aufrufenden Hauptschleife zurück kehrt, kann die Hauptschleife natürlich auch nichts tun.
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 21:19
von raiminator
Entweder versteh ich dich falsch oder du mich

Die Mainloop wurde bei mir schon lange aufgerufen, und das mit dem sleep steht in einer Funktion die bei Klick auf einen Button aufgerufen wird.
Habe es jetzt mal mit
main.after(2000, neueFrage()) versucht, aber das gibt das gleiche Ergebnis :/
Re: Frage zu time.sleep()
Verfasst: Donnerstag 17. Mai 2012, 21:28
von deets
Du verstehst falsch.
Der mainloop muss nicht nur *einmal* aufgerufen werden. Ein GUI-Programm befindet sich quasi bestaendig darin, und wenn events kommen - wie Button-druecken oder eben Timer-Events - dann wird code ausgefuehrt. Aber solange der ausgefuehrt wird (und sleep ist ausfuehren..) passiert nix mit der GUI.
Und dein gezeigter call ist auch falsch. Du musst natuerlich neueFrage nicht *AUFRUFEN*, sondern uebergeben:
main.after(2000, neueFrage)
Beachte die fehlenden Klammern.
Re: Frage zu time.sleep()
Verfasst: Freitag 18. Mai 2012, 14:59
von raiminator
aah, danke, jetzt klappt's endlich!