Python如何在调用事件时调用函数(Turtle Graphics)

时间:2015-11-29 21:12:54

标签: python turtle-graphics

在以下功能中:

def back():
    global turncount
    stdraw.clear()
    eraseData()
    turncount -= 1
    newState(gameData[turncount])
    gamePiece()
    buttoncolor()
    time.sleep(2)
    whosTurnnow()

如果在龟图上调用事件,我无法弄清楚如何停止执行某个函数。

例如,假设用户点击了龟图形屏幕,该行将执行wn.onclick(back)

现在假设当单击乌龟图形窗口后执行函数返回时,它现在正在执行行{4}},它在执行下一行(time.sleep(2))之前等待2秒。

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

问题是,有没有办法在第一次取消之前的呼叫并忽略back()之后的最后一行,即time.sleep(2),并且仅在第二次呼叫时运行该行。

1 个答案:

答案 0 :(得分:0)

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

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( - >主题)调用此函数。

P.S。:执行time.sleep时,永远不要忘记无法