自动完成组合框

时间:2013-05-29 15:51:08

标签: tcl tk

我正在尝试扩展ttk :: combobox的行为,使其行为与浏览器中的Google搜索框一样 - 即我希望它自动下拉并将列表框中的条目限制为匹配的条目到目前为止我输入的字符串。最后,我想选择已自动完成的字符串部分,以便用户输入的下一个字符将导致它被删除并重新开始匹配过程。

我在Tcler's wiki上找到了该页面,但似乎选择了刚刚输入的字母条目,这不是我想要的。 (考虑用户从美国国家列表中选择。当他们输入A时,我希望选择仅限于阿拉巴马州,阿拉斯加州,亚利桑那州和阿肯色州;当他们输入L时,列表应限于阿拉巴马州和阿拉斯加州。维基上的代码会在用户输入A时选择Alabama,然后在输入L时选择路易斯安那州。)

我尝试在ttk :: combobox上定义一些绑定,但是放弃了 - 说实话,我记不清楚了 - 并试图扩展ttk :: entry的行为以覆盖它。< / p>

从ttk / combobox.tcl中大量借用后,我设法发布一个列表框并限制列表框中的条目,但是现在我已经添加了绑定以使上下箭头改变了选择。确切地说,所选项目移动得很愉快,但是当条目小部件失去焦点时,某些时,整个应用程序挂断,我的tclsh会吸收所有CPU。

我正在Windows和Linux上使用ActiveTcl 8.6进行开发,代码似乎在两个平台上都表现相同,尽管我没有在Linux上尝试过,因为我第一次看到挂在视窗。我很乐意分享我的代码,但由于演示脚本运行到大约450行,如果其他人发布了那么多,我就不会自己阅读。

任何人都可以通过向我提出正确的问题来为我设置一个灯泡吗?问题感觉像是时间问题,但我不知道从哪里开始尝试追踪它。

非常感谢。

编辑我一直在绞尽脑汁,我认为我放弃扩展ttk :: combobx的尝试的原因是因为已经存在大量绑定,有些绑定了我不想要的东西。当前的工作在条目小部件和Key-Up,Key-Down,FocusIn和FocusOut绑定上使用 validatecommand

当前代码位于pastebin here上。

1 个答案:

答案 0 :(得分:2)

嗯,那太尴尬了!

我又看了the code on the wiki,发现它做了我最想要的事情。它不会发布列表框,但它会自动完成,如果您尝试导航(未发布)列表框,通过按下“键入”或“按键”,它会以突出显示的相应项目开始。

这足以满足我的需要;如果我确定必须发布了列表框,那么我当时就可以看到。 (鉴于我尝试推出自己的不良经验,我怀疑我会忍受这个。)

非常感谢你的忍耐和建议。