Как остановить обратный вызов, когда один evend связывает другой? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть рамка холста tkinter, в которой левая кнопка мыши привязана к какому-либо действию

canvas_frame = tk.Canvas(self)  # Master is tk.Frame

self.canvas_frame.tag_bind('some_tag', '<ButtonPress-1>', self.some_action)

def some_action(self):
    #do something
    self.canvas_frame.bind('<ButtonPress-1>', self.another_action)

Всякий раз, когда я щелкаю левой кнопкой мыши some_tag, выполняется another action. Даже с первым щелчком, когда another_action изначально привязан.

Есть ли способ предотвратить выполнение another_action?

1 Ответ

0 голосов
/ 17 февраля 2020

Существуют различные способы сделать это, в зависимости от того, что наиболее подходит, зависит от вашего варианта использования.

  1. Вместо того, чтобы связывать self.another_action в buttonPress-1, свяжите его в buttonRelease -1.

  2. Свяжите его, как вы делаете, но у вас есть локальная переменная в self.another_action, которая отслеживает первый вызов и просто ничего не делает (возвращает) при первом вызове.

  3. Вместо того, чтобы устанавливать привязку в buttonPress-1, вместо этого установите переменную, которая указывает, что дополнительная привязка должна быть сделана. Затем сделайте привязку в другом месте, например, при следующем вызове Tk.after ()

...