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