我有一个事件处理程序,我绑定到 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'
答案 0 :(得分:0)
我的猜测是语句config.text.tag_add(...)
正在抛出一个未被捕获的错误。如果是这种情况,则返回语句将永远不会执行。如果返回从不执行,则没有什么可以防止类绑定被触发。
如果窗口中未选择任何文本,则会引发错误。
答案 1 :(得分:0)
您可能在根目录上绑定了CTRL + H.
发生这种情况的原因是因为事件按此顺序分派:
Root回调
*(这是默认行为的来源)
解决方案是将事件绑定两次。一旦在文本小部件本身上使用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
的详细信息,请参阅相关答案