2017-02-13 14 views
0

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

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")) 

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

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

ответ

0

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).

 Смежные вопросы

  • Нет связанных вопросов^_^