Python 在条目小部件中重新绑定“全选”

Python 在条目小部件中重新绑定“全选”,python,tkinter,widget,tk,Python,Tkinter,Widget,Tk,我的问题与使用文本小部件的问题有关 但是,在我的例子中,我想重新绑定entry小部件上的selectall 我尝试了以下操作,可以使用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, EN

我的问题与使用文本小部件的问题有关

但是,在我的例子中,我想重新绑定entry小部件上的selectall

我尝试了以下操作,可以使用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,这将不再起作用,并且不会选择任何文本。有人解释了原因吗?

这是因为您将绑定放在小部件上而不是小部件类上,并且默认情况下,类上的绑定在小部件上的绑定之后触发

Tkinter处理事件的方式是首先查看小部件上是否有绑定,然后查看类上是否有绑定,然后查看顶级窗口上是否有绑定,最后查看特殊类all上是否有绑定。可以说,除非打破事件链,否则事件将按顺序处理。因此,您的control-w绑定发生了,但随后类上的绑定发生了,并且有效地撤消了您在绑定中所做的操作

最好的解决方案是1不使用lambda,而是使用实方法或函数,2执行返回“break”,以防止类和其他绑定触发。或者,如果希望此绑定影响应用程序中的所有条目小部件,而不仅仅是一个特定的条目小部件,请使用bind_类,并将类名指定为“entry”

您在问题中提到的问题的答案给出了更改类绑定的示例