gpt4 book ai didi

python - 在 Entry 小部件中重新绑定(bind) “select all”

转载 作者:行者123 更新时间:2023-11-30 23:42:30 24 4
gpt4 key购买 nike

我的问题与this有关使用文本小部件的地方。

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

我尝试了以下操作,允许我使用 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 这就不再起作用了,并且没有文本被选中。有谁能解释一下为什么吗?

最佳答案

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

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

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

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

关于python - 在 Entry 小部件中重新绑定(bind) “select all”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com