【问题标题】:Disable an event for all widgets of a specific type in TCL/TK禁用 TCL/TK 中特定类型的所有小部件的事件
【发布时间】:2022-12-14 03:21:32
【问题描述】:

我想在 TCL/TK 中禁用特定类型的小部件的事件。具体来说,我不希望鼠标滚轮更改 ttk::combobox 中的所选项目。我发现bind .widget <<event>> break可以用来解绑。我能够使用以下几行成功解除绑定ttk::combobox

bind .cb <MouseWheel> break
bind .cb <4> break
bind .cb <5> break

我想为所有 ttk::combobox 执行此操作。我发现 this 回答中的 tkinter 是可能的,所以我倾向于相信 TCL/TK 是可能的。

我尝试了以下无济于事。

bind ttk::combobox <MouseWheel> break
bind ttk::combobox <4> break
bind ttk::combobox <5> break

我使用了 manual 中的 bind widget_type &lt;event&gt; procedure 格式,其中包含以下几行。

bind Entry <<Paste>> {puts Paste}
bind Entry <<Scroll>> {puts Scroll}

【问题讨论】:

    标签: tcl tk-toolkit


    【解决方案1】:

    我发现问题是ttk::combobox不是类名。将 ttk::combobox 更改为 TCombobox 解决了问题。

    bind TCombobox <MouseWheel> break
    bind TCombobox <4> break
    bind TCombobox <5> break
    

    【讨论】:

    • 由于与资源名称工作方式相关的神秘原因,小部件类名称不能(轻易地)包含冒号并且必须以大写字母开头。它是非常丑陋的。如果您只需要关闭组合框子集的功能,请使用 bindtags 命令为这些小部件提供额外的绑定标签(具有正确的优先级)并将您的绑定放在上面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多