我正在使用Text小部件,我有一个关于Tk使用的旧式快捷方式的问题.
即:
全选:Ctrl + /
vs Ctrl + a
Cut:Ctrl + w
vs Ctrl + x
Copy:Meta + w
vs Ctrl + c
Paste:Ctrl + y
vsCtrl + v
在Windows上,除Ctrl + a外,它们都可以工作.
1)是否可以重定向绑定,所以.bind('
调用已绑定Ctrl + /?
2)我试过"全选":
txt_text.bind('', 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
方法执行此操作.
这是重新绑定类的示例:
def __init__(...): self.root.bind_class("Text","", self.selectall) def selectall(self, event): event.widget.tag_add("sel","1.0","end")
effbot.org有一篇相当不错的文章,名为Events and Bindings.它详细介绍了类和窗口小部件绑定及其发生的顺序.
Tk的绑定机制是所有GUI工具包中最好的.一旦你理解它是如何工作的(并且它非常简单),你会发现很容易扩充或替换任何或所有默认绑定.