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(->线程)调用此函数
注:永远不要忘记,在执行时间睡眠时,你不能做任何事情。不容易,优雅的。你是说问题不清楚吗?不,我是说没有优雅的解决方案。见我的答案;-)。这是非常糟糕的代码风格,但我看到的唯一解决方案是:(。