我正在向我的根窗口添加一个键绑定(一个Tk()
实例,其中包含一个Text小部件):
root.bind("Control-o", setconnpanelopen)
问题在于control-o
默认绑定到"插入换行符",以便我的程序触发,但它也会插入换行符!
即使我在其末端放置了return 'break'
,也会发生这种情况 - 所以它在之前发生,所以看起来似乎。
1)如何重新映射此行为?
2)我没有找到任何地方的文本小部件的默认keybindings
列表 - 它们在某处可用?
答案 0 :(得分:4)
你想阅读" bindtags" - tkinter的绑定机制。
小部件有一组bind"标签" (或" bindtags")按顺序处理。例如,文本小部件有四个标记:小部件的标记,小部件类的标记(内部类名,而不是python类),顶层窗口的标记和&#34的标记。 ;所有&#34 ;.
大多数默认绑定都在类绑定上。这意味着您在窗口小部件上创建的任何特定绑定都会在默认绑定之前发生。在这种特殊情况下,由于您绑定到根窗口,因此之后发生绑定。
您可以随时创建一个绑定,以阻止事件在绑定链上传播。您可以通过从绑定中返回文字字符串"break"
来完成此操作。因此,如果绑定在文本小部件本身上,则可以通过setconnpanelopen
返回"break"
来阻止默认行为。由于您的原始绑定位于根窗口,因此无法提供帮助,因为默认绑定在绑定之前发生。
您有几个解决方案:一,将绑定放在窗口小部件而不是根窗口上。或者,将其保留在根窗口上,以便无论哪个窗口小部件具有焦点,它都将触发,然后向文本窗口小部件添加绑定,除了返回"break"
之外什么也不做,以防止发生默认绑定。
有关绑定的最终列表,请参阅http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M162 - 这指向tcl / tk,但这就是tkinter的强大功能,它是tkinter文档的最终权威。
答案 1 :(得分:0)
创建自己的小部件,该小部件继承自文本小部件。您可能还希望将回调函数作为窗口小部件的方法。
class MyTextWidget(Text):
def __init__(self, master, **kw)
Text.__init__(self, master, **kw)
self.bind('<Control-O>', setconnpanelopen)
确保您的setconnpanelopen
功能返回&#39; break&#39;。
您可能需要查看此内容:http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm