ale*_*dro 4 python tkinter key-bindings
我正在向我的根窗口(一个Tk()包含文本小部件的实例)添加一个键绑定:
root.bind("Control-o", setconnpanelopen)
Run Code Online (Sandbox Code Playgroud)
问题是它似乎control-o默认绑定为“插入换行符”,因此我的程序会触发,但它也会插入换行符!即使我将 areturn 'break'放在末尾也会发生这种情况- 所以它之前会触发,看起来如此。
1)如何重新映射这种行为?
2)我没有在任何地方找到keybindings文本小部件的默认列表- 它们在某处可用?
您想阅读“bindtags”——tkinter 的绑定机制。
小部件具有一组按顺序处理的绑定“标签”(或“bindtags”)。例如,一个文本小部件有四个标签:小部件的标签、小部件类的标签(它是一个内部类名,不是python类)、一个顶层窗口的标签和一个“全部”的标签.
大多数默认绑定都在类绑定上。这意味着您在小部件上创建的任何特定绑定发生在默认绑定之前。在这种特殊情况下,由于您绑定到根窗口,因此您的绑定发生在.
在任何时候,您都可以创建一个绑定来阻止事件沿 bindtag 链向上传播。您可以通过"break"从绑定中返回文字字符串来完成此操作。因此,如果您的绑定是在文本小部件本身上,您可以通过setconnpanelopenreturn来防止默认行为"break"。由于您的原始绑定在根窗口上,这无济于事,因为默认绑定发生在您的绑定之前。
您有几个解决方案:一,将绑定放在小部件上而不是根窗口上。或者,将它留在根窗口上,这样无论哪个小部件具有焦点,它都会触发,然后向文本小部件添加一个绑定,该绑定只返回"break"以防止发生默认绑定。
有关绑定的明确列表,请参阅http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M162——这指向 tcl/tk,但这就是 tkinter 的权力,它是最终的tkinter 文档方面的权威。