tkinter不区分大小写的绑定

时间:2011-09-13 13:17:32

标签: python tkinter bind case-sensitive

我注意到当你在tkinter(python3.2 winxp)中绑定键时,绑定对字母字符区分大小写。换句话说,如果在大写锁定处于活动状态时按Control + o,则绑定<Control-o>将不起作用。这是否意味着我需要为每个不区分大小写的键组合和字母字符写两个绑定?或者有什么方法可以解决这个问题吗?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

是的,你必须制作两个绑定。

答案 1 :(得分:1)

你必须在你的情况下绑定两次,但是一旦你写了一个聪明的功能,你就不需要考虑它了。让我们定义一个为我们做这件事的函数。

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)