tcl - 为什么我的绑定(bind)被阻止?

标签 tcl

我正在从头开始重写一个已经可以工作的应用程序,并且其中的几个模块遇到了一个奇怪的障碍。目前,它唯一做的就是将 CSV 文件读入字典,设置 GUI,然后将字典写回 CSV。 GUI 应该打开文档窗口来选择字典中的项目,因为它们被要求:目前我只希望它在我按回车键时为所有项目打开一个窗口。

昨天它正常工作。今天,我对 CSV 读取/保存命令进行了一些更改,突然主窗口不再响应。我对这些更改有确切的差异,并且它们都不会影响事件处理。

绑定(bind)看起来像这样:

bind . <Escape> {exec wish $argv0 &; exit}
bind . <?> {catch {console show} ; ::log::lvSuppressLE warning 0}
bind . <Return> IDB::GUI::openwindow

我在维基上查看过,并在网上搜索过,但如果之前已经讨论过这个问题,我似乎已经错过了。除其他外,我尝试过调用 update并使用 bindtags优先考虑我的绑定(bind)。这些都不起作用,但是如果我在绑定(bind)之后添加它:

tk_messageBox -message foo

它的工作原理就像一个魅力:当我按下按键时,所有绑定(bind)都会启动。显然,消息框清除了阻止事件传递的某些内容,但我无法弄清楚它是什么。

我非常希望避免仅仅为了让我的应用程序做出响应而发布无意义的消息框。

别告诉我上帝因为我在耶稣受难日工作而惩罚我。

预计到达时间:设置 GUI 后的消息框似乎还不够,我在设置之前也需要一个。当我删除该事件时,事件再次停止工作。

得到答案后编辑:一个简单的focus .似乎足以保持我的主窗口响应。为了更好地衡量,我添加了另一个绑定(bind),bind . <Button-1> {focus .} ,我希望这能让我在有什么事情再次转移注意力时恢复注意力。我还可以在我的应用程序日志记录中添加一些焦点内省(introspection)。

(编辑的编辑:当然,如果有人放入绑定(bind)bind . <Button-1> {focus .},一旦开始向 GUI 添加例如条目小部件,记住将其取出会非常有帮助:否则人们可能会简单地想知道为什么一个条目不存在单击它们时不会获得焦点。很简单?当然是。)

正如多纳尔指出的那样,<?>不是有效的事件代码(应该类似于 <Key-question> )。它对我有用,但如果您决定重用该特定绑定(bind),请记住它不以任何方式保证对您有用。

最佳答案

听起来您的主窗口根本没有键盘焦点。弹出消息框然后关闭它可能会产生将焦点设置到主窗口的副作用。

尝试明确地将焦点设置在上。

关于tcl - 为什么我的绑定(bind)被阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151200/

相关文章:

C++/Tk如何执行一般的tcl代码?

tcl - for循环中的按钮命令(没有这样的变量)

arguments - TCL/Expect - exec - 如何使用参数执行程序

package - 在 Tcl 中调用 "package require Tk",而不将其写入每个 .tcl 文件中

windows-7 - 尝试在 Windows 7 上使用 tcl 线程会导致访问冲突

multithreading - Tcl的线程安全记录器

linux - 在linux中读取expect文件中的输出

namespaces - 将命令重命名为不同的命名空间

performance - mzscheme 中的 I/O 性能

TCL:Windows 中线程之间的双向通信