有人知道FocusOut事件为什么不能在linux上运行吗?
我有1个启用的文本框和3个禁用的组合框。
我将文本框与FocusOut事件绑定,在这里它将调用启用或禁用3组合框的过程。
它在窗户上工作得很好。但是,在Linux上执行此操作时,它似乎不会触发FocusOut事件。一个奇怪的事情是,如果我点击按钮,FocusOut事件似乎会被触发。
可能是因为我的组合框被禁用了吗?
但为什么它能在窗户上工作呢?
我真的希望有人能帮我。
提前谢谢。

最佳答案

我在过去观察到,一些窗口管理器在设置回以前,会暂时从Tk中窃取每个按钮单击的焦点;我怀疑这与关键事件处理的工作方式有关,但我目前无法检查(由于在OSX上,情况有所不同)。由于涉及的复杂性,我建议,如果您绑定到cc,您也应该检查您是否不久后就获得了一个事件;在更新按钮的禁用状态之前,稍微增加一点延迟(例如,重新编译)不会受到伤害。
或者您可以挂起代码来禁用entry widget validation engine,可能如下所示:

.e configure -validation focusout -validatecommand doButtonEnableDisable

对于旧样式<FocusOut>和新样式<FocusIn>小部件,验证界面都是相同的。它也由微调框支持。请注意,您需要从entry返回布尔值true,否则您将拒绝对条目的更改,并且您应该注意确保代码不会产生错误,否则它将禁用自身;文档列出了要注意的事项。

关于linux - Tcl/Tk小部件和FocusOut在Linux上无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6593847/

10-11 15:34