有谁知道为什么 FocusOut 事件在 Linux 上不起作用?
我有 1 个启用的文本框和 3 个禁用的组合框。 我将文本框与 FocusOut 事件绑定(bind),它将调用启用或禁用 3 组合框的过程。
它在 Windows 上完美运行。但是,在 Linux 上执行此操作时似乎不会触发 FocusOut 事件。一件奇怪的事情是,如果我单击按钮,似乎会触发 FocusOut 事件。
可能是因为我的组合框被禁用了? 但为什么它可以在 Windows 上运行?
我真的希望有人能帮助我。
提前致谢。
最佳答案
我过去观察到,一些窗口管理器会在每次单击按钮时临时从 Tk 窃取焦点,然后再将其恢复;我怀疑这与关键事件处理的工作方式有关,但我目前无法检查(由于在 OSX 上,情况不同)。由于涉及的复杂性,我建议如果您绑定(bind)到 <FocusOut>
, 你还应该检查你是否得到一个 <FocusIn>
不久之后的事件;在更新按钮的禁用状态之前稍加延迟(例如 0.1 秒)不会有什么坏处。
或者您可以挂起代码来禁用 entry widget validation engine ,也许是这样的:
.e configure -validation focusout -validatecommand doButtonEnableDisable
旧样式的验证界面相同entry
和新款式ttk::entry
小部件。 spinboxes 也支持它。请注意,您需要从 doButtonEnableDisable
返回一个 bool 值 true或者您将拒绝对条目的更改,并且您应该注意确保您的代码不会产生错误或者它会自行禁用;文档列出了需要注意的事项。
关于linux - Tcl/Tk 小部件和 FocusOut 在 Linux 上没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593847/