我正在使用 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'是我,我较早使用了。)