hi leute,
ich hab folgendes prob:
ich hab ein memory spiel in python mit hilfe von tkinter programmiert.
jetzt soll aber, wenn zwei ungleiche karten aufgedeckt sind der script kurz anhalten, damit man sich die merken kann, und dann nach einer bestimmten zeit die karten wieder umdrehen.
meine versuche mit time.sleep(2) und einer manuell programmierten warteschleife liefen nur dahin hinaus, dass man die erste karte sieht, die zweite angeklickt hat, die aber gar nicht erst gezeigt wird, sondern 2 sekunden wartet und dann die erste karte wieder umdreht ohne die zweite gezeigt zu haben.
Allerdings ist das prob deshalb verwunderlich, weil in der script reihenfolge der erst die zweite karte zeigt, dann die warteschleife und dann wieder umdrehen. jetzt überspringt der aber einfach den ersten schritt.
kann das vielleicht daran liegen, dass sich diese zeitfunktionen sich nicht mit tkinter vertragen?
Habt ihr noch ne Idee, wie man das sonst lösen könnte?
Danke im vorraus,
the-flasher
PS: ich hoffe ihr habt mein geschwafel auch verstanden , sonst bitte nachfragen
warteschleife
die zeitfunktionen vertragen sich schon mit tk-inter, nur würde ich mla darauf tippen, das du einen Fehler beim einsetzen des Wartens gemacht hast. Kannst du uns bitte mal den Quelltext zeigen, auch wenn er mitunter sehr lang ist? Dann können wir das mal darauf hin auch noch mal prüfen (ich zweifle nicht dran, das du das nicht schon gemacht hast)...
nicht ganz sauber der script, ist aber auch noch in der entwicklungsphase
der braucht zum ausführen noch 6 bilder 01-06.jpg und ein back.jpg, ist egal welche größe.
danke für deine bemühungen
der braucht zum ausführen noch 6 bilder 01-06.jpg und ein back.jpg, ist egal welche größe.
danke für deine bemühungen
Code: Alles auswählen
#creator
#Till Juergens
#import
import Tkinter
from Tkconstants import *
import whrandom
import time
#/
class switch(Tkinter.Button):
def __init__(self,master, geheim, imgid, r, c, callback):
Tkinter.Button.__init__(self, master)
self.backimg="back.gif"
self.geheim=geheim
self.imgid=imgid
self.back=Tkinter.PhotoImage(file=self.backimg)
self.bild=Tkinter.PhotoImage(file=self.geheim)
self.callback=callback
self.grid(row=r, column=c)
self.config(image=self.back)
self.bind('<Button-1>', self.callback)
def dreheum(self):
self.config(image=self.bild, width=self.back.width(), height=self.back.height())
self.bind('<Button-1>', self.nix)
def disablebutton(self):
# self.config(stat=DISABLED)
self.bind('<Button-1>', self.nix)
def dreheback(self):
self.config(image=self.back)
self.bind('<Button-1>', self.callback)
def gibID(self):
return self.imgid
def nix(self, m):
return ""
class spiel:
def __init__(self, master):
frame=Tkinter.Frame(master)
frame.pack(fill=BOTH, expand=1)
checklist=[]
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte01=switch(frame, bild, zahl, 0, 0, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte02=switch(frame, bild, zahl, 0, 1, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte03=switch(frame, bild, zahl, 0, 2, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte04=switch(frame, bild, zahl, 0, 3, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte05=switch(frame, bild, zahl, 1, 0, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte06=switch(frame, bild, zahl, 1, 1, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte07=switch(frame, bild, zahl, 1, 2, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte08=switch(frame, bild, zahl, 1, 3, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte09=switch(frame, bild, zahl, 2, 0, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte10=switch(frame, bild, zahl, 2, 1, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte11=switch(frame, bild, zahl, 2, 2, self.changeimage)
zahl=self.randrow(checklist)
bild="0"+str(zahl)+".gif"
checklist.append(zahl)
self.karte12=switch(frame, bild, zahl, 2, 3, self.changeimage)
self.firstButton=""
self.firstID=0
def check(self, liste, zahl):
i=0
for z in liste:
if z==zahl:
i=i+1
if i==2:
return 1
else :
return 0
def randrow(self, checklist):
zahl=whrandom.randint(1,6)
if self.check(checklist, zahl)==1:
zahl=self.randrow(checklist)
return zahl
def changeimage(self, event):
self.currentButton=event.widget
self.currentButton.dreheum()
currentID=self.currentButton.gibID()
if self.firstButton!="":
if currentID==self.firstID:
self.currentButton.disablebutton()
self.firstButton.disablebutton()
else:
# self.warten() oder time.sleep(2)
self.currentButton.dreheback()
self.firstButton.dreheback()
self.firstButton=""
self.firstID=0
else:
self.firstButton=self.currentButton
self.firstID=currentID
def warten(self):
old=time.time()
new=time.time()
while 1>new-old:
new=time.time()
tk=Tkinter.Tk()
start=spiel(tk)
tk.mainloop()
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Du hast doch die Methode self.drehum(). Wenn du dazu einen Zähler implementierst, dann rufst du sleep() in die self.dereheum() Methode auf, wenn der Zähler gleich ist. Nach Ablauf der Zeit setzt du den Zähler zurück und verdeckst die Karten wieder.
Ohne TKInter zu können meine ich, daß das laufen müsste.
Hans
Ohne TKInter zu können meine ich, daß das laufen müsste.
Hans
hm...klappt leider nicht. ich hab jetzt einfach in dreheum() sleep(1) eingefügt und das komische ist: die erste karte wird umgedreht aber die zweite nicht. d.h. da muss irgendwo ein kleiner script fehler sein, ich find den nur nicht
ich hab aber auch mal gehört, dass der rechner schon so viel mit tkinter beschäftigt wird, dass er einfach so "Blockfunktionen" wie sleep() nicht akzeptiert, kann das sein?
ich hab aber auch mal gehört, dass der rechner schon so viel mit tkinter beschäftigt wird, dass er einfach so "Blockfunktionen" wie sleep() nicht akzeptiert, kann das sein?
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Ich hoffe du hast ein LINUX System. Dann bau doch mal in deine dreheum() Funktion ein oder mehrere print "irgendwas" Befehle ein, Wenn du das ganze dann aus einem Terminal startest, dann schreibt der print Befehl jedesmal ins Terminal. So kannst du schon mal nachweisen, wann eine Funktion durchlaufen wird oder auch nicht.
Hans
Hans