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

标签 linux tcl tk-toolkit tile

有谁知道为什么 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/

相关文章:

c++ - 使用 C 或 C++ 从控制台获取原始输入

linux - 如何停止分钟的 cron 工作?

tcl - 如何在Tcl中将整数转换为带有前导零的字符串?

tcl - 如何分发用解释性语言构建的项目?

python - Tkinter 和 ttk python2.7

Tcl/Tk : why is file ignored by inotify?

python - Anaconda,通过 pip 安装的 Python 包不起作用,Linux

tcl - TCL中upvar 0和upvar 1的区别

python - 一键阻止打开多个窗口

c++ - .so 大小会影响虚函数性能吗