1

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

但是,就我而言,我想重新绑定条目小部件上的全选。

我尝试了以下允许我使用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+更改wCtrl+ ,a这将不再起作用,并且不会选择任何文本。有没有人解释为什么?

4

1 回答 1

4

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

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

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

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

于 2012-07-09T15:30:43.460 回答