Danke.
Soweit war ich aber auch schon

Mit after und allem dazugehörigen hatte es auch funktioniert, bis darauf, dass ich in einer Schleife der Funktion sagte, hintereinander die Buttons zu drücken und wieder loszulassen, aber da after einen Thread bildet, wurden alle Buttons zur gleichen Zeit heruntergedrückt und wieder losgelassen, was nicht dem Sinn entsprach. Auch dafür habe ich eine Lösung gefunden, aber die funktioniert nicht gut.
Und da ich dachte von einer Funktion gelesen zu haben, fragte ich hier nach
Meine Lösung:
Code: Alles auswählen
class Zahlenfeld(Frame):
def __init__(self, master, **cnf):
self.kombination = []
self.buttons = {}
opt = {"pad": 0, "zpadx": 10, "zpady": 10, "zbg": "grey", "bd": 5, "font": ("Arial", 15, "bold")}
keys = opt.keys()
opt.update(cnf)
for i in keys:
setattr(self, i, opt[i])
del opt[i]
Frame.__init__(self, master, opt)
self.erstellen()
def erstellen(self):
row = 0
col = 0
for i in range(1, 10):
b = Button(self, font = self.font, text = i, padx = self.zpadx, pady = self.zpady, bg = self.zbg, bd = self.bd)
b.grid(row = row, column = col, padx = self.pad, pady = self.pad)
b.bind("<Button-1>", self._handler)
self.buttons[i] = b
if not (i%3):
row += 1
col = 0
else:
col += 1
def _handler(self, e):
self.hinzufuegen(e.widget.cget("text"))
def hinzufuegen(self, nummer):
self.kombination.append(nummer)
def wiederholen(self):
for i in self.kombination:
self._druecken(self.buttons[i], 1)
def _druecken(self, button, n):
if n:
button.config(relief="sunken")
button.after(600, lambda: self._druecken(button, 0))
thread = Thread(target = self._zeit)
thread.start()
thread.join()
else:
button.config(relief="raised")
button.update()
def _zeit(self):
time.sleep(0.5)
class Zahlenfenster(Tk):
def __init__(self, toolfenster = True, vordergrund = False, erscheinen = False, verschwinden = False):
self.toolfenster = bool(toolfenster)
self.vordergrund = bool(vordergrund)
self.erscheinen = bool(erscheinen)
self.verschwinden = bool(verschwinden)
self.tempo = 0.04
Tk.__init__(self)
self.title("Bitte geben sie ihre Kombination ein!")
self.attributes("-toolwindow", toolfenster)
self.attributes("-topmost", vordergrund)
self.protocol("WM_DELETE_WINDOW", self.schliessen)
self.resizable(0,0)
self.zahlenfeld = Zahlenfeld(self, pad=1, font=("Arial", 30, "bold"), bg="orange", zbg="white")
self.zahlenfeld.pack()
self.focus_force()
#self.mainloop()
if __name__ == "__main__":
a = Zahlenfenster(erscheinen = 1, verschwinden = 1, vordergrund = 1)
Graphisch noch nicht gut, aber ich bin ja auch erst am Algorithmus dran
Komische Sache ist, dass wenn die Zeit in der after-Funktion größer ist als die in dem Thread, welcher time.sleep ausführt, dass es dann funktioniert, aber umgedreht nicht mehr... Da wird nicht einmal ein Button heruntergedrückt? Hängt das mit dem Thread zusammen?
Grüße Markus