Python如何在调用事件时调用函数(海龟图形)

Python如何在调用事件时调用函数(海龟图形),python,turtle-graphics,Python,Turtle Graphics,在以下功能中: def back(): global turncount stdraw.clear() eraseData() turncount -= 1 newState(gameData[turncount]) gamePiece() buttoncolor() time.sleep(2) whosTurnnow() 如果在图形上调用事件,我很难确定如何停止函数的执行 例如,假设用户单击turtle图形屏幕,此行将执

在以下功能中:

def back():
    global turncount
    stdraw.clear()
    eraseData()
    turncount -= 1
    newState(gameData[turncount])
    gamePiece()
    buttoncolor()
    time.sleep(2)
    whosTurnnow()
如果在图形上调用事件,我很难确定如何停止函数的执行

例如,假设用户单击turtle图形屏幕,此行将执行
wn.onclick(back)

现在假设在单击turtle图形窗口后执行函数back时,它正在执行一行
time.sleep(2)
,在执行下一行之前等待2秒(
whosurnnow()

现在,假设在此期间用户再次单击海龟图形屏幕,将再次调用函数
back()

问题是,是否有办法在第一次调用时取消上一次调用,并忽略
时间之后的最后一行。睡眠(2)
,即
whosurnnow()
,然后仅在第二次调用时运行该行。

一个(不优雅,非常糟糕)的解决方案是:

running = 0
def myBack(): never overrive functions (here: turtle.back)
    global running
    imthenext = False
    if running>0: imthenext = True
    running += 1
    todo = """global turncount
stdraw.clear()
eraseData()
turncount -= 1
newState(gameData[turncount])
gamePiece()
buttoncolor()
time.sleep(2)
whosTurnnow()""".split("\n")
    for line in todo:
        if running>1 and not imthenext: running-=1; return
        else: exec(line, globals(), locals())
但它应该工作(未经测试)

如果还有其他解决办法,那就接受它,忘掉这一个吧。这只起作用。不太好

您必须使用ontimer(->线程)调用此函数


注:永远不要忘记,在执行时间睡眠时,你不能做任何事情。

不容易,优雅的。你是说问题不清楚吗?不,我是说没有优雅的解决方案。见我的答案;-)。这是非常糟糕的代码风格,但我看到的唯一解决方案是:(。