我开始在python 3中编码蛇。作为GUI,我使用Tkinter。
我有一个计时器,等待一秒钟然后再次调用该方法。现在我的问题是如何停止self.wait
?
我知道我可以很轻松地解决此问题,但是我已经在其他地方遇到了这个问题,所以很高兴知道我如何可以停止此问题。
这是使蛇四处移动的方法。 (只有计时器很关键)。计时器在这里,因此每秒移动一次。
def move_snake(self):
self.after(1000, self.move_snake)
# code goes on
现在,如果我改变方向(通过按一个按钮),我会执行以下操作:
def change_direction(self, event):
self.pressed = event.keysym
self.move_snake()
如果我这样做,“旧”计时器仍然处于活动状态,因此该方法将被多次调用(按下按钮时会添加一个额外的计时器)。
最好激活最新的计时器。
您需要更多信息吗?
答案 0 :(得分:1)
假设move_snake
使用self.pressed
,则无需在move_snake
内部调用change_direction
。
但是,如果您确实要停止旧循环并开始新循环,则可以保存从after
返回的ID并将其提供给after_cancel
:
def move_snake(self):
self.after_id = self.after(1000, self.move_snake)
# code goes on
def change_direction(self, event):
self.pressed = event.keysym
# cancel the old loop
self.after_cancel(self.after_id)
# start a new loop
self.move_snake()