tkinter 不区分大小写的绑定

5 投票
2 回答
1819 浏览
提问于 2025-04-17 02:12

我注意到在使用tkinter(python3.2 winxp)绑定按键时,字母的大小写是区分的。换句话说,如果你按下Control+o,而大写锁定(Caps Lock)是开启的,<Control-o>就不会起作用。这是不是意味着我需要为每个不区分大小写的字母组合写两个绑定呢?或者有没有其他办法解决这个问题?

谢谢你的帮助 :)

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

是的,你需要做两个绑定。

撰写回答