2014-01-25 41 views
0

我正在使用文本小部件以编程方式取消选择文本

我已经覆盖了右键单击以在我的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

你应该告诉你如何禁用弹出菜单中的代码。请尽可能缩短代码,剥离不相关的东西。 –

+0

除此之外,您用于删除“sel''标签的代码以及激活标签删除的代码。再次,尽可能少的代码。 –

+0

@Hoodiecrow我已添加代码。我真的很希望我犯了一个错误。 –

回答

1

通过为所选字符范围设置标记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有一篇文章about the text widget,其中提到了tag remove命令,但未示出如何在Perl-Tk中执行此操作。

的CPAN文档中的文本组件表示,该命令的语法是

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

,所以我想

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

或类似的东西是做它的方式(没有的Perl,不能测试)。

(注:在评论中提到的“Hoodiecrow”是我的,我用的是尼克更早。)

+0

我试过了。它不工作! –

+0

对不起,我不认为我可以帮你。这很可能是一个Perl-Tk问题,因为它在Tcl/Tk中工作得很好。 (你用'$ text'替换你自己的控件变量,等等,对吧?) –

+0

哦!看起来指数,即使是准数字,也必须是字符串。尝试指定'1.0'。 –

相关问题