在Entry小部件中重新绑定“全选”

时间:2012-07-09 13:24:19

标签: python tkinter widget tk

我的问题与this使用Text小部件的问题有关。

但是,在我的情况下,我想在条目小部件上重新绑定select all。

我尝试了以下操作,允许我使用 Ctrl + w 选择输入字段中的所有输入:

self.frmSearch = Frame()
self.txtSearch = Entry(self.frmSearch, bd=1, width=35)
self.txtSearch.bind('<Control-w>',lambda e: self.txtSearch.select_range(0, END))

然而,一旦我将 Ctrl + w 更改为 Ctrl + a ,这不再有用了文本被选中。有没有人解释为什么?

1 个答案:

答案 0 :(得分:3)

这是因为您将绑定放在窗口小部件而不是窗口小部件类上,默认情况下,在窗口小部件上绑定后,类上的绑定会触发。

Tkinter处理事件的方式是先查看窗口小部件是否有绑定,然后是类,然后是顶层窗口,最后是特殊类“all”。事件按顺序处理,除非您打破事件链,可以这么说。所以,你的control-w绑定发生了,但是然后对类的绑定发生并且有效地撤消你在绑定中所做的事情。

最好的解决方案是1)不使用lambda,而是使用真正的方法或函数,2)执行“return'break'”,以防止类和其他绑定被触发。或者,如果您希望此绑定影响应用程序中的所有条目小部件而不仅仅是特定条目小部件,请使用bind_class给出类名'Entry'

您在问题中提到的问题有一个答案,它提供了更改类绑定的示例。