在以下功能中:
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)
,并且仅在第二次呼叫时运行该行。
答案 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时,永远不要忘记无法