以编程方式取消选择文本



我正在使用 text widget

我过度右键单击以在我的perl/tk GUI中显示弹出菜单。但是,每当我右键单击任何位置时,都会从较早的光标位置进行文本,直到我右键单击的位置将被突出显示。

我不知道是什么原因引起的,所以我只是想编程地取消选择此突出显示的文本。

我该怎么做?

谢谢!

编辑:

我已经绑定了右键单击,这是称为:

的子例程
sub rightClickMenu {
    my ($self, $x, $y) = @_;
    $txt->tagRemove('sel', '1.0', 'end');
    $rightMenu -> post($x, $y);
    $txt->tagRemove('sel', '1.0', 'end');
}

我已经删除了 SEL 标签两次(可以肯定)。$rightMenu是弹出的菜单。右键单击时显示出非常好的。

通过为选定的字符范围设置标签 sel来处理文本窗口中的选择。可以这样删除此标签:

.t tag remove sel 1.0 end

假设您的文本小部件的路径名是.t。这说明了从第一个(1.0)到最后一个字符之后的所有字符( end)的所有字符,标签sel将被删除。

注意:通常,删除标签时,必须处理已将其分配给文本中多个范围的可能性。上面的标签删除调用清除了整个文本中的标签,这对于选择标签来说是可以的,因为您(通常)只能具有一个选定的范围。如果有多个具有标签foo的范围,并且您只想清除其中一个范围,则首先需要找到该范围的启动和结束索引,并清除(通过调用tag remove)仅在这些范围之间的标签。

注2:所有这些都假设可见效果实际上是由sel标签设置的。在TK中,它不是按钮2的标准绑定来设置此标签:可能是Perl-TK中的某些非标准绑定设置了一些其他标签,这些标签以与sel标签相同的方式显示。为了进一步调查,此命令可能很有用:

.t tag names $placeWhereIRightClicked

(再次假设您的文本小部件的路径名是.t,并且placeWhereIRightClicked保留右键单击的位置的索引)将告诉您所有在该索引处活跃的标签。

(命令

.t tag names

将列出整个文本的标签。)

tkdocs有一篇有关文本小部件的文章,其中提到了 tag remove命令,但是如何在perl-tk中显示它。

文本小部件的CPAN文档说命令的语法为

$text->tagRemove(tagName, index1, ?index2, index1, index2, ...?)

所以我想

$text->tagRemove('sel', '1.0', 'end')

或类似的事情是这样做的方法(没有perl,不能测试)。

(注意:评论中提到的'Hoodiecrow'是我,我较早使用了。)

最新更新