/ / tkinter niewrażliwe na wielkość liter bind - python, tkinter, bind, rozróżniana wielkość liter

Wiązanie niewrażliwe na małe litery - python, tkinter, bind, wielkość liter

Zauważyłem, że podczas łączenia kluczy w tkinter (python3.2 winxp) powiązania uwzględniają wielkość liter ze znakami literowymi. <Control-o> nie działa, jeśli naciśniesz Control + o, jeśli cap caps lockjest aktywny. Czy to znaczy, że muszę napisać dwa powiązania dla każdej kombinacji klawiszy bez rozróżniania wielkości liter ze znakami literowymi? Czy jest jakiś sposób, aby to rozwiązać?

Dzięki za pomoc :)

Odpowiedzi:

2 dla odpowiedzi № 1

Tak, musisz zrobić dwa wiązania.


1 dla odpowiedzi nr 2

Musisz powiązać dwa razy w swoim przypadku, ale nie musisz o tym myśleć po napisaniu sprytnej funkcji. Zdefiniujmy funkcję, która robi to dla nas.

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)

A następnie użyj go tak:

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)