我正在使用文本小部件。
我已经超越右键单击以在我的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
是弹出的菜单。右键单击时显示完全正常。
答案 0 :(得分:1)
通过为所选字符范围设置标记sel
来处理文本窗口小部件中的选择。可以像这样删除此标记:
.t tag remove sel 1.0 end
假设文本小部件的路径名为.t
。这指定对于从第一个(1.0
)到最后一个字符(end
)之后的字符位置的所有字符,将删除标记sel
。
注意:通常在删除标记时,必须处理它已被分配到文本中的多个范围的可能性。上面的标记删除调用会从整个文本中清除标记,这对于选择标记来说很好,因为您(通常)只应该选择一个选定的范围。如果有多个范围包含标记foo
并且您只想清除其中一个,则首先需要找到该范围的起始和结束索引并清除(通过调用tag remove
)标记只在那些之间。
注意2:所有这一切都假设可见效果实际上是由sel
标记设置引起的。在Tk中,它不是按钮2设置此标记的标准绑定:它可能是Perl-Tk中的某些非标准绑定设置了一些其他标记,其以与{{1相同的方式在视觉上显示标签是。有关进一步调查,此命令可能很有用:
sel
(再次假设您的文本小部件的路径名为.t tag names $placeWhereIRightClicked
,并且.t
包含发生右键单击的位置的索引)将告诉您在该索引处处于活动状态的所有标记。
(命令
placeWhereIRightClicked
将列出整个文本的标签。)
TkDocs有一篇文章about the text widget,其中提到了.t tag names
命令,但是在Perl-Tk中如何显示它。
文本小部件的CPAN文档说明该命令的语法是
tag remove
所以我想
$text->tagRemove(tagName, index1, ?index2, index1, index2, ...?)
或其他类似的方法(没有Perl,无法测试)。
(注意:评论中提及的' Hoodiecrow'是我,我之前使用过那个昵称。)