python - 在文本小部件中重新绑定(bind) "select all"

标签 python tkinter widget tk-toolkit

我正在使用文本小部件,但我对 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/

相关文章:

python - 如何限制多处理进程的范围?

python - 在 Pandas 的密度图中显示平均线

python - 'in fp' 和 'in fp.readlines()' 有什么区别?

python - 如何使我的功能不能与另一个功能同时工作?

api - SoundCloud Widget API setVolume 方法坏了?

coldfusion - Coldfusion 的 HMVC 框架?

Python 3.x 四舍五入一半

python - 如何只删除窗口边框?

python - tkinter 中的属性错误

php - 哪些程序用于构建与在线 php 和 mysql 交互的独立桌面小部件?