我正在将keybinding添加到我的根窗口(一个Tk()
实例,其中包含一个文本小部件):
root.bind("Control-o", setconnpanelopen)
问题是control-o
似乎在默认情况下被绑定为“insert newline”,这样我的过程就会被触发,但是它也会插入一个新行!
即使我在它的末尾放了一个return 'break'
,它也会发生这种情况,所以它看起来是在之前触发的。在
1)如何重新映射这种行为?在
2)我在任何地方都找不到默认的文本小部件keybindings
的列表-它们在某处可用?在
Tags:
你想了解一下“bindtags”tkinter的绑定机制。在
以“绑定”或“绑定”的顺序处理标记。例如,文本小部件有四个标记:小部件的标记、小部件类的标记(它是内部类名,而不是python类)、顶层窗口的标记和“all”的标记。在
大多数默认绑定都在类绑定上。这意味着您在小部件上创建的任何特定绑定都发生在默认绑定之前。在本例中,由于绑定到根窗口,所以绑定发生在之后。在
在任何时候,您都可以创建一个绑定来停止事件在bindtag链上的传播。通过从绑定中返回文本字符串}来防止默认行为。由于原始绑定在根窗口上,这没有帮助,因为默认绑定发生在绑定之前。在
"break"
来实现这一点。因此,如果绑定在文本小部件本身上,则可以通过使setconnpanelopen
返回{您有两种解决方案:一种,将绑定放在小部件上,而不是根窗口上。或者,将其保留在根窗口中,这样无论哪个小部件有焦点,它都会触发,然后向文本小部件添加一个绑定,该小部件只返回
"break"
,以防止发生默认绑定。在有关绑定的最终列表,请参见http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M162这指向tcl/tk,但这正是tkinter的动力所在,它是tkinter文档的最终权威。在
创建从文本小部件继承的您自己的小部件。您也可以将回调函数作为小部件的一种方法。在
确保您的
setconnpanelopen
函数返回“break”。在您可能想看看这个:http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
相关问题 更多 >
编程相关推荐