остановить себя. после того, как происходит прерывание - PullRequest
0 голосов
/ 24 апреля 2019

Я начал кодировать Snake в Python 3. В качестве графического интерфейса я использую 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 Ответ

1 голос
/ 24 апреля 2019

Предполагая, что move_snake использует self.pressed, вам не нужно вызывать move_snake внутри change_direction.

Однако, если вы действительно хотите остановить старый цикл и начать новыйЦикл, вы можете сохранить идентификатор, который возвращается из after и присвоить его 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...