tcl – 自动完成组合框

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

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

我尝试在ttk :: combobox上定义一些绑定,但是放弃了 – 老实说,我记不清楚了 – 并试图扩展ttk :: entry的行为来覆盖它.

从ttk / combobox.tcl中大量借用后,我设法发布了一个列表框并限制了列表框中的条目,但由于我添加了绑定以使上下箭头改变选择,因此我遇到了大问题.确切地说,所选项目被愉快地移动,但是当条目小部件失去焦点时,整个应用程序挂起并且我的tclsh吸收了所有CPU.

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

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

非常感谢.

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

当前代码在pastebin here上.

最佳答案 嗯,这很尴尬!

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

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

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

点赞