Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl/Tk小部件和FocusOut在linux上无法正常工作_Linux_Tcl_Tk_Tile - Fatal编程技术网

Tcl/Tk小部件和FocusOut在linux上无法正常工作

Tcl/Tk小部件和FocusOut在linux上无法正常工作,linux,tcl,tk,tile,Linux,Tcl,Tk,Tile,有人知道为什么FocusOut事件在linux上不起作用吗 我有1个启用的文本框和3个禁用的组合框。 我用FocusOut事件绑定textbox,它将调用启用或禁用3组合框的proc 它在Windows上工作得非常好。但是,在Linux上执行此操作时,它似乎不会触发FocusOut事件。一件奇怪的事情是,若我点击按钮,FocusOut事件似乎会被触发 可能是因为我的组合框被禁用了吗? 但为什么它能在Windows上工作呢 我真的希望有人能帮助我 提前感谢。我过去曾观察到,一些窗口管理器在每次单击

有人知道为什么FocusOut事件在linux上不起作用吗

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

它在Windows上工作得非常好。但是,在Linux上执行此操作时,它似乎不会触发FocusOut事件。一件奇怪的事情是,若我点击按钮,FocusOut事件似乎会被触发

可能是因为我的组合框被禁用了吗? 但为什么它能在Windows上工作呢

我真的希望有人能帮助我


提前感谢。

我过去曾观察到,一些窗口管理器在每次单击按钮时都会临时从Tk中窃取焦点,然后将其设置回原位;我怀疑这与关键事件处理的工作方式有关,但我目前无法检查(因为在OSX上,情况有所不同)。由于涉及的复杂性,我建议如果您绑定到
,您还应该检查是否在不久之后收到
事件;在更新按钮的禁用状态之前,稍微延长一点时间(例如0.1s)不会有任何影响

或者,您可以挂起代码以禁用,可能如下所示:

.e configure -validation focusout -validatecommand doButtonEnableDisable

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

我过去曾观察到,一些窗口管理器在每次单击按钮时都会临时从Tk中窃取焦点,然后将其设置回原位;我怀疑这与关键事件处理的工作方式有关,但我目前无法检查(因为在OSX上,情况有所不同)。由于涉及的复杂性,我建议如果您绑定到
,您还应该检查是否在不久之后收到
事件;在更新按钮的禁用状态之前,稍微延长一点时间(例如0.1s)不会有任何影响

或者,您可以挂起代码以禁用,可能如下所示:

.e configure -validation focusout -validatecommand doButtonEnableDisable

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

只是为了澄清——您真的关心焦点(即:键盘发送文本的位置)还是光标是否在小部件上?你在做什么来触发
事件——一个对tab键的特殊绑定,你点击一些其他条目或文本小部件。。。?可以肯定的是,你说的是文本小部件还是输入小部件(没有名为“textbox”的小部件)?我担心的是,当用户在输入小部件中输入一些内容后单击combobox或文本小部件时。因此我使用事件。只是澄清一下——你真的关心焦点(即:键盘发送文本的位置)还是光标是否在小部件上?你在做什么来触发
事件——一个对tab键的特殊绑定,你点击一些其他条目或文本小部件。。。?可以肯定的是,你说的是文本小部件还是输入小部件(没有名为“textbox”的小部件)?我担心的是,当用户在输入小部件中输入一些内容后单击combobox或文本小部件时。因此,我正在使用事件。我尝试了第二个建议,但遗憾的是,它在linux上也不起作用。它的行为与我将条目小部件绑定到时的行为相同。另一方面,当绑定到我的条目小部件时,它确实调用了我希望它调用的proc。知道为什么吗?谢谢=)我尝试了第二个建议,但遗憾的是它在linux上也不起作用。它的行为与我将条目小部件绑定到时的行为相同。另一方面,当绑定到我的条目小部件时,它确实调用了我希望它调用的proc。知道为什么吗?谢谢=)