繁体   English   中英

重新映射tkinter中的默认键绑定

[英]remap default keybinding in tkinter

我正在向我的根窗口添加一个键绑定(一个Tk()实例,其中包含一个Text小部件):

root.bind("Control-o", setconnpanelopen)

问题是,似乎control-o默认绑定为“insert newline”,因此我的程序会触发,但它也会插入换行符! 即使我在它的末尾放回一个return 'break' - 所以它会发生,所以它似乎发生了。

1)我怎样才能重新映射这种行为?

2)我没有找到文本小部件的默认keybindings列表 - 它们在某处可用?

你想阅读“bindtags” - tkinter的绑定机制。

窗口小部件具有一组按顺序处理的绑定“标记”(或“绑定标记”)。 例如,文本小部件有四个标记:小部件的标记,小部件类的标记(内部类名,不是python类),顶层窗口的标记和“全部”的标记。

大多数默认绑定都在类绑定上。 这意味着您在窗口小部件上创建的任何特定绑定都发生默认绑定之前 在这种特殊情况下,由于您绑定到根窗口,因此绑定发生在之后

您可以随时创建一个绑定,以阻止事件在绑定链上传播。 您可以通过从绑定中返回文字字符串"break"来完成此操作。 因此,如果绑定在文本小部件本身上,则可以通过让setconnpanelopen返回"break"来阻止默认行为。 由于您的原始绑定位于根窗口上,因此无效,因为默认绑定绑定之前发生。

您有几个解决方案:一,将绑定放在窗口小部件而不是根窗口上。 或者,将其保留在根窗口上,以便无论哪个窗口小部件具有焦点,它都将触发,然后向文本窗口小部件添加绑定,该窗口小部件不执行任何操作,只返回"break"以防止发生默认绑定。

有关绑定的最终列表,请参阅http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M162 - 这指向tcl / tk,但这就是tkinter的功能,它是最终的关于tkinter文档的权威。

创建自己的小部件,继承自文本小部件。 您可能还希望将回调函数作为窗口小部件的方法。

class MyTextWidget(Text):
    def __init__(self, master, **kw)
        Text.__init__(self, master, **kw)
        self.bind('<Control-O>', setconnpanelopen)

确保setconnpanelopen函数返回'break'。

您可能想看看这个: http//effbot.org/tkinterbook/tkinter-events-and-bindings.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM