2011-09-13 18 views
2

tkinter(python3.2 winxp)でキーをバインドすると、バインドでは大文字と小文字が区別されます。つまり、caps lockが有効な場合にControl + oを押すと、バインド<Control-o>が機能しません。これは、大文字と小文字を区別しないキーの組み合わせごとに2文字の文字列をバインドする必要があることを意味しますか?またはこれを解決する方法はありますか?tkinterの大文字と小文字を区別しないバインド

ありがとうございます。

答えて

2

はい、2つのバインディングを作成する必要があります。

1

あなたのケースでは2回バインドする必要がありますが、巧妙な機能を書いたらそれについて考える必要はありません。私たちのためにこれを行う関数を定義しましょう。

def bind_(widget, all_=False, modifier="", letter="", callback=None, add='',): 
    if modifier and letter: 
     letter = "-" + letter 
    if all_: 
     widget.bind_all('<{}{}>'.format(modifier,letter.upper()), callback, add) 
     widget.bind_all('<{}{}>'.format(modifier,letter.lower()), callback, add) 
    else: 
     widget.bind('<{}{}>'.format(modifier,letter.upper()), callback, add) 
     widget.bind('<{}{}>'.format(modifier,letter.lower()), callback, add) 

そして、このようにそれを使用します。

bind_(text_widget, modifier="Control", letter="s", callback=save) 
bind_(text_widget, modifier="Control-Shift", letter="s", callback=save_as) 
bind_(text_widget, modifier="", letter="r", callback=print_something)