[英]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.