Timout in Python?

Fragen zu Tkinter.
Antworten
Gast

Hallo, ich bin ein absoluter Beginner in Python und versuche zur Zeit ein Memoryspiel in Python mit Tkinter zu programmieren. Mein Problem:

Nach dem 2. Aufdecken einer Karte sollen beide Karten kurz angezeigt werden (etwa 2-3 sek) bevor sie wieder zugedeckt werden. Ich habe schon im Internet und in diesem Forum gesucht, aber nichts gefunden.
Gibt es einen timeout-Befehl in Python mit dem ich dieses Problem lösen kann?

time.sleep(2) funktioniert nicht - damit erzwinge ich zwar ein timeout, allerdings wird die 2. karte trotzdem nicht angezeigt.

Wäre dankbar über jeden Beitrag!

MfG
Peti
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Bin selbst neu ...

würde es mit einer if - Schleife mal versuchen.
Nach dem Motto:

Code: Alles auswählen

if Time > 3:
funktion schließen.
Sonst weiß ich selbst derzeit auch keine besser Lösung.
Vielleicht in paar Jahren, mal sehen ... .
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
rogen
User
Beiträge: 85
Registriert: Dienstag 29. März 2005, 17:45
Wohnort: neustift
Kontaktdaten:

ich würde für jedes kartenaufdecken ein thread starten
wo ein time.sleep() steht
peti
User
Beiträge: 1
Registriert: Montag 13. Juni 2005, 15:56
Wohnort: Kleve
Kontaktdaten:

Danke, für die Ansätze!

Habe jetzt alles ausprobiert... Das Problem bleibt: Die Unterbrechung funzt, aber die 2. Karte wird nicht angezeigt während dieser Pause und verschwindet anschließend halt wieder.

Ich kriege es einfach nicht hin. Wenn man in der Python-Hilfe nach "setTimeout" sucht, findet man auch einen Eintrag im Kapitel Socket-Objects. Jetzt weiss ich nicht ob es der Befehl ist nach dem ich suche und wie man diesen benutzt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

peti hat geschrieben:Ich kriege es einfach nicht hin. Wenn man in der Python-Hilfe nach "setTimeout" sucht, findet man auch einen Eintrag im Kapitel Socket-Objects. Jetzt weiss ich nicht ob es der Befehl ist nach dem ich suche und wie man diesen benutzt.
Nein, der ist für Timeouts in Netzwerk-sockets.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

peti hat geschrieben:...
Habe jetzt alles ausprobiert... Das Problem bleibt: Die Unterbrechung funzt, aber die 2. Karte wird nicht angezeigt während dieser Pause und verschwindet anschließend halt wieder.
...
Mir fällt es ein wenig schwer, den Kern des Problems zu verstehen.
Also ... eine Karte ist aufgedeckt, die 2. soll aufgedeckt werden während die Zeit läuft? Und danach wieder geschlossen werden?

Wenn in der Funktion der Befehl oder eine weitere Funktionsanweisung zum aufdenken der 2. Karte vor dem Zeitzähler (oder wie auch immer das heißt - eben die Zeile, für die Unterbrechung ect.) ist, müßte es vielleicht gehen.
Ansonsten ... wüßte ich auch nicht weiter.
Außer vielleicht noch, das man den Zeitunterbrecher per Funktion nach dem aufdecken der 2. Karten aufruft. Oder noch besser, erst sicher stellt ob eine 2. Karte aufgedeckt ist (mit dem bekannten if (und einer entsprechenden Variable?)) und dannach erst der Timer startet.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi peti!

Schreib mal root.update() vor dem time.sleep(2). Dann sollte auch die 2. Karte angezeigt werden.

Gruß, mawe
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

peti hat geschrieben:die 2. Karte wird nicht angezeigt während dieser Pause und verschwindet anschließend halt wieder.

Ich muss sagen, dass ich das auch reichlich widersprüchlich finde. Wenn sie nicht angezeigt wird, wie kann sie dann verschwinden?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Ich versteh nicht, warum das für manche so unverständlich ist. Schaut Euch mal dieses Snippet an:

Code: Alles auswählen

from Tkinter import *
import time

def click():
    b.configure(text="Off")
    time.sleep(3)

root = Tk()def click():
b = Button(text="On",command=click)
b.pack()
root.mainloop()
Gut, man clickt auf den Button, was passiert ... 3 Sekunden lang nix.
Genau das ist peti's Problem. Wenn man Memory mit Buttons programmiert, soll ja folgendes passieren: Alle Buttons sind umgedreht (also es steht nix drauf). Ich klick auf einen - ein Text erscheint auf dem Button. Ich klick auf noch einen - auch auf dem erscheint ein Text. Sind beide Texte gleich, bleiben die Buttons so, wenn nicht, verschwinden sie nach, sagen wir mal 3 Sekunden wieder. Wie in meinem Beispiel gezeigt, sieht man aber den Text vom 2. Button nicht, weil 3 Sekunden lang nix passiert, und dann die Texte wieder verschwinden (also sieht man den Text vom 2. überhaupt nicht). Kennt sich noch wer aus? ;)
Des Rätsels Lösung (zumindest bei meinem Snippet ist

Code: Alles auswählen

def click():
    b.configure(text="Off")
    root.update()
    time.sleep(3)
Gruß, mawe
Antworten