中断发生后停止自我

时间:2019-04-24 18:15:19

标签: python python-3.x tkinter

我开始在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()

如果我这样做,“旧”计时器仍然处于活动状态,因此该方法将被多次调用(按下按钮时会添加一个额外的计时器)。

最好激活最新的计时器。

您需要更多信息吗?

1 个答案:

答案 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()