Tcl 自动完成组合框

Tcl 自动完成组合框,tcl,tk,Tcl,Tk,我正在尝试扩展ttk::combobox的行为,使其行为类似于我浏览器中的Google搜索框——也就是说,我希望它自动下拉,并将列表框中的条目限制为与我目前键入的字符串相匹配的条目。最后,我希望选择自动完成的字符串部分,以便用户键入的下一个字符将导致删除该字符串并重新启动匹配过程 我在上找到了该页面,但它似乎选择了带有刚刚键入的字母的条目,这不是我想要的。(假设用户从美国各州列表中进行选择。当用户键入a时,我希望选择范围限于阿拉巴马州、阿拉斯加州、亚利桑那州和阿肯色州;当用户键入L时,列表应限于

我正在尝试扩展ttk::combobox的行为,使其行为类似于我浏览器中的Google搜索框——也就是说,我希望它自动下拉,并将列表框中的条目限制为与我目前键入的字符串相匹配的条目。最后,我希望选择自动完成的字符串部分,以便用户键入的下一个字符将导致删除该字符串并重新启动匹配过程

我在上找到了该页面,但它似乎选择了带有刚刚键入的字母的条目,这不是我想要的。(假设用户从美国各州列表中进行选择。当用户键入a时,我希望选择范围限于阿拉巴马州、阿拉斯加州、亚利桑那州和阿肯色州;当用户键入L时,列表应限于阿拉巴马州和阿拉斯加州。当用户键入a时,wiki上的代码将选择阿拉巴马州,当用户键入L时,将选择路易斯安那州。)

我尝试在ttk::combobox上定义一些绑定,但是放弃了——老实说,我不记得为什么了——并且尝试扩展ttk::entry的行为来覆盖它

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

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

有谁能帮我提个正确的问题,帮我点燃一个灯泡吗?这个问题感觉像是一个时间问题,但我不知道从哪里开始寻找它

非常感谢

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


当前代码在pastebin上。

好吧,那太尴尬了

我又看了一眼,发现它做了我最想做的事情。它不会发布列表框,但会自动完成,如果您试图通过按向上键或向下键来导航(未发布的)列表框,它将以突出显示的相应项目开始

这足够满足我的需要了;如果我决定我真的必须有列表框张贴,我可以看到有关的时间。(然而,考虑到我在尝试推出自己的产品时的糟糕经历,我怀疑我会接受这一点。)


非常感谢您的支持和建议。

您是否考虑过在列表框可见时在条目小部件上添加抓取?这应该可以防止小部件失去焦点。首先,我没有考虑抓取入口小部件。我真的没有想过抓取,除了非常害怕它们,因为在一次早期尝试中,当listbox获得焦点并且条目小部件被抓取时,我挂断了整个Linux框(反之亦然)。抓取/聚焦问题会导致100%的CPU利用率吗?我不认为抓取/聚焦问题会导致100%的CPU利用率,但如果没有看到您的代码,就无法确定了。@nurdglaw也许您可以将其私有化并链接到此处,在需要时进行更新,最后,在完成后将其从pastebin中删除。这听起来像是一个计划,杰瑞。什么是pastebin?哇,哈哈,很高兴你把它整理好了:)