有谁知道为什么FocusOut事件不能在linux上运行?
我有1个已启用的文本框和3个已禁用的组合框。 我将文本框与FocusOut事件绑定在一起,它将调用启用或禁用3个组合框的proc。
它在Windows上完美运行。但是,在Linux上执行此操作时,它似乎不会触发FocusOut事件。一个奇怪的事情是,如果我点击按钮,似乎会触发FocusOut事件。
可能是因为我的组合框被禁用了吗? 但为什么它适用于Windows?
我真的希望有人可以帮助我。
提前致谢。
答案 0 :(得分:1)
我曾经观察过,在设置它之前,一些窗口管理员会在每次点击按钮时暂时从Tk窃取焦点;我怀疑这与关键事件处理的工作方式有关,但我现在无法检查(由于在OSX上,事情是不同)。由于涉及的复杂性,我建议如果你绑定到<FocusOut>
,你还应该检查你之后是否会收到<FocusIn>
事件;
或者您可以挂起代码来禁用entry widget validation engine,也许是这样:
.e configure -validation focusout -validatecommand doButtonEnableDisable
旧样式entry
和新样式ttk::entry
窗口小部件的验证界面相同。它也受到旋转盒的支持。请注意,您需要从doButtonEnableDisable
返回一个布尔值true,否则您将拒绝对该条目的更改,您应该注意确保您的代码不会产生错误,否则它将自行禁用;文档列出了需要注意的事项。