2017-02-13 5 views
0

キーをクリックするとバインドを解除しようとしていますが、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秒後にキーを再度有効にするにはどうしたらいいですか?

ありがとうございました!

答えて

0

self.master.unbind('a', self.choiceA)あなたが指定した2番目の引数は、バインド時に返されたIDの代わりにアンバインドするコールバックです。

再バインドを遅延させるには、メソッドを使用する必要があります。delayはmsで、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)。

関連する問題