2012-07-09 78 views
1

我的问题与this有关,其中使用了文本小部件。重新绑定“全部选择”入口小部件

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

我想这让我使用按Ctrl瓦特选择在输入字段中的所有输入如下:

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瓦特Ctrl + a这不起作用,没有选择文本。有没有人有解释为什么?

回答

3

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

Tkinter处理事件的方式是首先看看是否存在绑定,然后放在类上,然后放在顶级窗口上,最后放到特殊类“全部”上。除非你打破了一连串的事件,可以这么说,这些事件是按顺序处理的。所以,你的控制-W绑定发生了,但是然后对这个类的绑定发生并且有效地解除了你在绑定中所做的事情。

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

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