我正在使用文本小部件,但我对 Tk 使用的老式快捷方式有疑问。
即:
全选:Ctrl + /
对比Ctrl + a
剪切:Ctrl + w
对比Ctrl + x
复制:Meta + w
对比Ctrl + c
粘贴:Ctrl + y
对比Ctrl + v
在 Windows 上,除 Ctrl+a 外,所有这些都有效。
1) 是否可以重定向绑定(bind),所以.bind('<Control-a>')
调用已绑定(bind) Ctrl +/?
2) 我试过“全选”:
txt_text.bind('<Control-a>', self.ctext_selectall)
地点:
def ctext_selectall(self, callback):
"""Select all text in the text widget"""
self.txt_text.tag_add('sel', '1.0', 'end')
但它不起作用,因为默认情况下 Ctrl+a 有效(光标转到开头)。它与其他一些未绑定(bind)的字母一起使用。如果 1 下的解决方案不可行,是否有可能实现这项工作?
最佳答案
默认绑定(bind)应用于小部件类。当您进行绑定(bind)时,它会影响特定的小部件,并且该绑定(bind)发生在类绑定(bind)之前。所以发生的事情是你的绑定(bind)发生了,然后类绑定(bind)发生了,这使得你的绑定(bind)看起来好像不起作用。
有两种方法可以解决这个问题。第一,您的 ctext_selectall
可以返回字符串“break”,这将阻止触发类绑定(bind)。这应该足以解决您眼前的问题。
第二种解决方案涉及更改类绑定(bind),以便您的首选绑定(bind)适用于所有文本小部件。您可以使用 bind_class
方法执行此操作。
这是一个重新绑定(bind)类的例子:
def __init__(...):
self.root.bind_class("Text","<Control-a>", self.selectall)
def selectall(self, event):
event.widget.tag_add("sel","1.0","end")
effbot.org 有一篇相当不错的文章,标题为 Events and Bindings .它更详细地介绍了类和小部件绑定(bind)以及它们发生的顺序。
Tk 的绑定(bind)机制几乎是所有 GUI 工具包中最好的。一旦您理解了它的工作原理(而且非常简单),您会发现可以轻松地增加或替换任何或所有默认绑定(bind)。
关于python - 在文本小部件中重新绑定(bind) "select all",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5870561/