我正在使用文本小部件,我有一个关于Tk使用的老式快捷方式的问题。
即:
全选:Ctrl + /
与Ctrl + a
切割:Ctrl + w
与Ctrl + x
副本:Meta + w
与Ctrl + c
粘贴:Ctrl + y
与Ctrl + v
在Windows上,除了Ctrl+a之外,所有这些都可以工作
1)是否可以重定向绑定,因此.bind('<Control-a>')
调用已绑定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在默认情况下起作用(光标指向开头)。它与其他未绑定的字母一起工作。如果不可能得到低于1的解,有没有可能使这个工作?
默认绑定应用于小部件类。当您进行绑定时,它会影响一个特定的小部件,并且绑定发生在类绑定之前。所以现在发生的事情是绑定正在发生,然后类绑定正在发生,这使它看起来好像绑定不起作用。
有两种方法可以解决这个问题。第一,您的
ctext_selectall
可以返回字符串“break”,这将阻止类绑定触发。这应该足以解决你眼前的问题。第二种解决方案涉及更改类绑定,以便将首选绑定应用于所有文本小部件。您可以使用
bind_class
方法来执行此操作。下面是重新绑定类的示例:
efffot.org有一个相当不错的文章名为Events and Bindings。本文将更详细地介绍类和小部件绑定以及它们发生的顺序。
Tk的绑定机制是任何GUI工具包中最好的。一旦您了解了它的工作原理(而且非常简单),您就会发现很容易扩充或替换任何或所有默认绑定。
请随意使用下面的代码,或者至少检查一下
select_all
方法是如何在DiacriticalEntry
和DiacriticalText
类中实现的。如果您选择使用类来代替您当前使用的任何小部件,您还将获得这样的优势,即用户可以轻松地键入某些字符,否则将更难输入。相关问题 更多 >
编程相关推荐