Python отменяет привязку / отключает привязку ключа после нажатия и возобновляет ее позже

Я пытаюсь отсоединить / отключить ключ, как только он нажал, и возобновить его функцию через 2 с. Но я не могу понять код для освобождения. Привязка на окне. Вот код, который я пробовал до сих пор:

self.choiceA = self.master.bind('a', self.run1) #bind key "a" to run1
def run1(self, event=None):
    self.draw_confirmation_button1()
    self.master.unbind('a', self.choiceA) #try1: use "unbind", doesn't work

    self.choiceA.configure(state='disabled') #try2: use state='disabled', doesn't't work, I assume it only works for button
    self.master.after(2000, lambda:self.choiceA.configure(state="normal"))

Далее, как мне снова включить ключ через 2 с?

Спасибо вам большое!

1 ответ

Решение

self.master.unbind('a', self.choiceA) не работает, потому что вторым аргументом, который вы указали, является обратный вызов, который вы хотите отменить, вместо идентификатора, возвращенного при создании привязки.

Чтобы отложить повторное связывание, вам необходимо использовать .after(delay, callback) метод где delay в мс и callback это функция, которая не принимает никаких аргументов.

import tkinter as tk

def callback(event):
    print("Disable binding for 2s")
    root.unbind("<a>", bind_id)
    root.after(2000, rebind)  # wait for 2000 ms and rebind key a

def rebind():
    global bind_id
    bind_id = root.bind("<a>", callback)
    print("Bindind on")


root = tk.Tk()
# store the binding id to be able to unbind it
bind_id = root.bind("<a>", callback)

root.mainloop()

Примечание: так как вы используете класс, мой bind_id Глобальная переменная будет для вас атрибутом (self.bind_id).

Другие вопросы по тегам