ich möchte für mein Quiz eine Hintergrundmusik einrichten, die sich immer wiederholt.
Problem:
wenn ich über window.after(ms, func) die Funktion zum Sound abspielen wieder aufrufe, könnte es sein dass in der zwischenzeit die frage beantwortet wurde und der Hintergrundsound genau dann angeht während gerade der Sound für Frage richtig/Falsch abgespielt wird.
Deshalb habe ich der Funktion das aktuelle Fragen-Level (0-15) übergeben und prüfe, wenn die Funktion aufgerufen wird, ob es immernoch das gleiche ist wie das in der Globalen Variable.
der Code:
Code: Alles auswählen
from winsound import *
...
level = 0
...
def bg_sound(old_level):
# sound nur abspielen wenn sich das level seit dem aufruf nicht verändert hat
if level == old_level:
if old_level < 8:
# sound unter 8000 €-Frage, 12sek lang
PlaySound(sound_bg1, SND_ASYNC)
# rekursiver Aufruf
window.after(12000, bg_sound(old_level))
else:
# sound über 8000 €-Frage (spannender), 20sek lang
PlaySound(sound_bg2, SND_ASYNC)
# rekursiver Aufruf
window.after(20000, bg_sound(old_level))
...
Das Programm friert währenddessen ein und wenn ich es dann schließe fängt es nach 10 Sekunden auf einmal an den Sound abzuspielen (nur 1x)Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 433, in newGame
bg_sound(level)
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 266, in bg_sound
window.after(20000, bg_sound(old_level))
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 266, in bg_sound
window.after(20000, bg_sound(old_level))
...
# mind. 10000x
...
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 266, in bg_sound
window.after(20000, bg_sound(old_level))
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 266, in bg_sound
window.after(20000, bg_sound(old_level))
File "D:\Python\aPROGRAMME\WWM\wwm.py", line 266, in bg_sound
window.after(20000, bg_sound(old_level))
RuntimeError: maximum recursion depth exceeded
Was habe ich am rekursiven Aufruf falsch gemacht?