禁用tkinter键盘快捷键

时间:2011-07-13 07:31:22

标签: python tkinter

我有一个事件处理程序,我绑定到 Ctrl + H ,Tkinter也识别为 backspace 。 虽然我在处理程序的末尾读到了return 'break',但我应该停止传播快捷方式,它不起作用! 是 Ctrl + H 问题,还是什么?

以下是代码:

def setheading(event=None):
    x=tkSimpleDialog.askstring('Set as header line', 'Enter an integer 1-5: ')
    config.text.tag_add('h'+x, SEL_FIRST,SEL_LAST)
    return 'break'

2 个答案:

答案 0 :(得分:0)

我的猜测是语句config.text.tag_add(...)正在抛出一个未被捕获的错误。如果是这种情况,则返回语句将永远不会执行。如果返回从不执行,则没有什么可以防止类绑定被触发。

如果窗口中未选择任何文本,则会引发错误。

答案 1 :(得分:0)

您可能在根目录上绑定了CTRL + H.

发生这种情况的原因是因为事件按此顺序分派:

  1. 小部件回叫
  2. Widget类回调*
  3. Root回调

    *(这是默认行为的来源)

  4. 解决方案是将事件绑定两次。一旦在文本小部件本身上使用return "break"并在根目录上执行一次,这样也可以使用其他小部件触发回调。小部件上的return "break"将阻止它进入阶段2(下一个),其中不期望的默认行为来自。

    你可以使用像这样的实用程序

    def k(handler):
        """decorates an event handler in such a way
    that the default shortcut command is not triggered
    same as event.preventDefault() in HTML5 but
    as a decorator"""
        def prevent_default(*event):
            handler(event)
            return 'break'
        return prevent_default
    

    有关回调级联disable tkinter keyboard shortcut (2)

    的详细信息,请参阅相关答案