У меня нет полного ответа на это, так как я пришел сюда в поисках одного сам.Тем не менее, у меня есть некоторый прогресс в этом, что кто-то еще может закончить ...
Вы можете создать новый класс, который вызывает как рекурсивную функцию следующим образом:
class function2:
def __init__(self,fun,args=None):
self.fun=fun
self.args=args
def begin_loop(self):
self.looping=True
self.loop()
def loop(self):
self.fun(self.args)
if self.looping: self.loop()
def end_loop(self):
self.looping=False
Теперь, чтобы связать егоВ вашем примере вы можете преобразовать свои функции в function2s и таким образом вызвать их onkeypress следующим образом:
l_up=function2(lbump_move_up)
r_up=function2(rbump_move_up)
l_down=function2(lbump_move_down)
r_down=function2(rbump_move_down)
Wn=turtle.Screen()
Wn.onkeypress(l_up.begin_loop,'w')
Wn.onkeypress(r_up.begin_loop,'Up')
Wn.onkeypress(l_down.begin_loop,'s')
Wn.onkeypress(r_down.begin_loop,'Down')
Wn.onkeyrelease(l_up.end_loop,'w')
Wn.onkeyrelease(r_up.end_loop,'Up')
Wn.onkeyrelease(l_down.end_loop,'s')
Wn.onkeyrelease(r_down.end_loop,'Down')
Wn.listen()
Итак, к вопросу: RecursionErrors
Если вы хотите, чтобы ваша функция вызывала небольшое изменение, тогда вам нужно будет удерживать кнопку в течение длительного времени, и это вызывает RecursionErrors - на которые, по крайней мере, в этом случае, похоже, не влияют операторы try / исключением.
Еще раз извините занеполное решение, но я чувствую, что вы, вероятно, можете избежать больших движений в понг.