我的问题是当用户点击一个条目时,“-browsecmd”的子程序被调用两次。当按下鼠标左键和释放鼠标时,它会激活。是否可以告诉“-browsecmd”仅激活一次?
这是一个演示我的问题的示例脚本。每当用户点击一个条目时,就会调用两次打印函数。
#!/usr/bin/perl
use strict;
use warnings;
use English qw( -no_match_vars );
use Tk;
use Tk::Tree;
my $mw = MainWindow->new();
my $tree = $mw->Tree(
-width => '25',
-browsecmd => \sub {
my ($numbers) = @ARG;
print $numbers. "\n";
}
);
foreach (qw(one two three four five six )) {
$tree->add( $ARG, -text => $ARG ); #populates the tree
}
$tree->pack();
MainLoop();
感谢您阅读我的留言。
EDIT1:忘记发布指向Tk::Tree Documentation
的链接答案 0 :(得分:2)
我已经四处寻找,发现Tk :: Tree真的是一个Tix Tree。进一步挖掘使用以下代码段找到tutorial(稍微调整一下):
示例:“我的browsecmd被调用两次”
tixScrolledListBox .list -browsecmd Browse proc Browse args { if {[tixEvent type] ne "<ButtonRelease-1>"} { puts "browsing [tixEvent value]" } }
这看起来非常相关,但我不知道tixEvent
是如何映射到Perl的。您可能需要直接询问Perl / Tk维护者(或提交错误报告)。
答案 1 :(得分:2)
有办法摆脱这种行为:
my $tree = $mw->Tree(
-width => '25',
-selectmode => "single", # <= this makes it work
-browsecmd => \sub {
my ($numbers) = @ARG;
print $numbers. "\n";
}
);
通过浏览父窗口小部件的文档找到此内容:Tk::HList
(BINDINGS
部分很有趣)。