Tcl / Tk小部件和FocusOut在linux上没有按预期工作

时间:2011-07-06 08:56:17

标签: linux tcl tk tile

有谁知道为什么FocusOut事件不能在linux上运行?

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

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

可能是因为我的组合框被禁用了吗? 但为什么它适用于Windows?

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

我曾经观察过,在设置它之前,一些窗口管理员会在每次点击按钮时暂时从Tk窃取焦点;我怀疑这与关键事件处理的工作方式有关,但我现在无法检查(由于在OSX上,事情是不同)。由于涉及的复杂性,我建议如果你绑定到<FocusOut>,你还应该检查你之后是否会收到<FocusIn>事件;

,在更新按钮的禁用状态之前,稍加延迟(例如,0.1秒)

或者您可以挂起代码来禁用entry widget validation engine,也许是这样:

.e configure -validation focusout -validatecommand doButtonEnableDisable

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