【问题标题】:How to unbind default bindings from a widget如何从小部件取消绑定默认绑定
【发布时间】:2014-05-20 01:39:25
【问题描述】:

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

我知道解除绑定的基本知识

bind .c <Up> {magic code}
bind .c <Up> {}

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

示例文本小部件带有向上键键以向上移动,我该如何删除它? 因此,当用户按下键时,什么也不会发生。

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

我读到这应该可以解除单个绑定

 bind all <Up> {}

(“向上”是 OS X 的向上箭头键)

但它不适合我。 :(

很抱歉,这似乎是一个愚蠢的问题,但 bind 最近让我很困惑。先感谢您。

【问题讨论】:

    标签: widget tcl bind tk


    【解决方案1】:

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

    1. 与小部件同名的绑定标签。这些是应用程序代码的正常代码。
    2. 与小部件类同名的绑定标签(例如,Button 用于按钮,Canvas 用于画布)。这些通常留给 Tk 的默认值;从此处删除内容可能会破坏代码的其他部分。
    3. 与包含小部件的顶层同名的绑定标签(顶层除外)。这些是针对每个对话框的热键之类的。
    4. 全局绑定标签all。这些处理一些“支持”的事情,但通常不使用。

    每个绑定标签最多只能使用一个绑定; Tk 更喜欢使用最具体的那个。

    从一个绑定标签中删除绑定并不意味着该事件不会被处理;另一个绑定标签上的绑定可能仍会拾取它。试图绕过其他绑定标签来欺骗代码是不会令人满意的。但是,如果一个标签上的绑定以break 结束,它会阻止尝试进一步的绑定标签;它提前终止处理。这使得屏蔽特定事件变得容易:

    bind .c <Up> break
    

    Tk 在其内部的一些地方使用了这种掩蔽技巧……

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      相关资源
      最近更新 更多