当前位置:  开发笔记 > 编程语言 > 正文

在"文本"小部件中重新绑定"全选"

如何解决《在"文本"小部件中重新绑定"全选"》经验,为你挑选了1个好方法。

我正在使用Text小部件,我有一个关于Tk使用的旧式快捷方式的问题.

即:

全选:Ctrl + /vs Ctrl + a
Cut:Ctrl + wvs Ctrl + x
Copy:Meta + wvs Ctrl + c
Paste:Ctrl + yvsCtrl + 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以下的解决方案,是否有机会使这项工作成功?



1> Bryan Oakley..:

默认绑定应用于窗口小部件类.当您执行绑定时,它会影响特定的窗口小部件,并且绑定在类绑定之前发生.所以正在发生的事情是你的绑定正在发生,然后发生类绑定,这使得它看起来好像你的绑定不起作用.

有两种方法可以解决这个问题.一,你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工具包中最好的.一旦你理解它是如何工作的(并且它非常简单),你会发现很容易扩充或替换任何或所有默认绑定.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有