如何取消绑定窗口小部件的默认绑定

Dar*_*nja 3 bind tk-toolkit tcl widget

我很难理解如何取消绑定事件.

我知道基本解除你自己的绑定

bind .c <Up> {magic code}
bind .c <Up> {}
Run Code Online (Sandbox Code Playgroud)

我真的想知道如何从预绑定小部件中删除绑定.

例如,Text小部件带有向上移动的向上键,我该如何删除它?因此,当用户点击密钥时,没有任何事情发生.

有没有办法从小部件中删除所有绑定?(没有粒子理由只是想知道.)

而且我读到这应该有效,因为解除绑定

 bind all <Up> {}
Run Code Online (Sandbox Code Playgroud)

("向上"是OS X的向上箭头键)

但它不适合我.:(

对不起,如果这看起来像一个愚蠢的问题,但绑定最近一直在绊倒我.先感谢您.

Don*_*ows 5

Tk有不同的绑定类(称为"bindtags"),它附加了它的绑定.默认情况下,每个小部件都有:

  1. 与小部件同名的绑定标签.这些是应用程序代码的正常选择.
  2. 与窗口小部件的类同名的绑定标签(例如,Button用于按钮,Canvas用于画布).这些通常留给Tk的默认值; 从这里删除东西可能会破坏代码的其他部分.
  3. 与包含窗口小部件的顶层同名的绑定标签(顶层除外).这些是针对每个对话框的热键,这类似的东西.
  4. 全局绑定,all.这些处理一些"逆止"的东西,但通常不使用.

最多只使用一个来自每个结合标签的结合; Tk更喜欢使用最具体的一个.

从一个绑定标签中删除绑定并不意味着不会处理该事件; 另一个绑定标签上的绑定可能仍会接收它.试图破解其他绑定标签以欺骗代码并不会令人满意.但是,如果一个标签上的绑定以a结束break,则会阻止进一步尝试绑定标记; 它提前终止处理.这样可以轻松屏蔽特定事件:

bind .c <Up> break
Run Code Online (Sandbox Code Playgroud)

Tk在自己内部的几个地方使用这种掩蔽技巧......