2017-02-13 3 views
0

J'essaie de désactiver/désactiver la clé une fois qu'il est cliqué, et reprendre sa fonction après 2s. Mais je ne peux pas comprendre le code pour la déliaison. La liaison est sur la fenêtre. Voici le code que j'ai essayé jusqu'à présent:Python désolidariser/désactiver la liaison de la clé après le clic et le reprendre plus tard

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

En outre, comment puis-je réactiver la clé après 2s?

Merci beaucoup!

Répondre

0

self.master.unbind('a', self.choiceA) ne fonctionne pas car le second argument que vous avez donné est le rappel que vous souhaitez annuler au lieu de l'ID renvoyé lors de la liaison.

Afin de retarder la re-lier, vous devez utiliser la méthode .after(delay, callback)delay est en ms et callback est une fonction qui ne prend aucun argument.

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

Remarque: puisque vous utilisez une classe, mon bind_id variable globale sera un attribut pour vous (self.bind_id).