繁体   English   中英

Tcl/Tk 小部件和 FocusOut 在 linux 上无法正常工作

[英]Tcl/Tk widgets and FocusOut not working as expected on linux

有谁知道为什么 FocusOut 事件在 linux 上不起作用?

我有 1 个启用的文本框和 3 个禁用的 combobox。 我将文本框与 FocusOut 事件绑定,它将调用一个启用或禁用 3 combobox 的过程。

它在 Windows 上完美运行。 但是,在 Linux 上执行此操作时,它似乎不会触发 FocusOut 事件。 一件奇怪的事情是,如果我单击按钮,似乎会触发 FocusOut 事件。

难道是因为我的 combobox 被禁用了? 但为什么它在 Windows 上有效?

我真的希望有人可以帮助我。

提前致谢。

我过去观察到,一些 window 管理器会在每次单击按钮之前暂时从 Tk 中窃取焦点,然后再将其设置回来; 我怀疑这与关键事件处理的工作方式有关,但我目前无法检查(由于在 OSX 上,情况有所不同)。 由于涉及的复杂性,我建议如果您绑定到<FocusOut> ,您还应该检查您是否在不久之后收到<FocusIn>事件; 在更新按钮的禁用状态之前有一点额外的延迟(例如,0.1 秒)不会受到伤害。

或者你可以挂起代码来禁用入口小部件验证引擎,可能像这样:

.e configure -validation focusout -validatecommand doButtonEnableDisable

旧样式entry和新样式ttk::entry小部件的验证界面相同。 旋转盒也支持它。 请注意,您需要从doButtonEnableDisable返回 boolean true 否则您将拒绝对条目的更改,并且您应注意确保您的代码不会产生错误,否则它将自行禁用; 文档列出了需要注意的事项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM