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”是我,我之前用过那个昵称。)