1

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

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

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

可能是因为我的组合框被禁用了吗?但为什么它可以在 Windows 上运行?

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

提前致谢。

4

1 回答 1

1

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

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

.e configure -validation focusout -validatecommand doButtonEnableDisable

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

于 2011-07-06T13:01:09.603 回答