如何从Perl / TK中的子例程获取调用者窗口小部件?

时间:2013-01-24 21:05:49

标签: perl tk

在perl Tk中的

我想问一下在使用-command选项时如何获取调用小部件。

我有一个对话框小部件,它由以前未知数量的条目动态创建。有一个Entry-widget,每个按钮旁边都有一个可以浏览Entry的可能(有用)字符串。

因此,如果按下第二个条目旁边的按钮,结果应存储在第二个条目中,依此类推。

代码如下所示。

my $count = 0;
my @name = ();
my @val = ();
my @edit = ();
my @button = ();

my $fr = $wind->Frame->pack;

foreach ( @outputs ) {  
    $name[$count] = helper::trim($_);
    $val[$count] = '';

    $fr->Label(-text => $name[$count])->grid(-row => $count, -column => 0, -sticky => 'w');
    $edit[$count] = $fr->Entry(-textvariable => \$val[$count], -width => 30)->grid(-row => $count, -column => 1);
    $button[$count] = $fr->Button(-width => 20, -text => 'Select', 
            -command => sub { &select(\$val[$count], \$edit[$count]); } 
        )->grid(-row => $count, -column => 2);

    $count++;
} 

但是,因为在完成对话框构建之后调用了& select,所以$ count总是在最后一个值上,我没有得到信息,我按下了哪个按钮。行为

-command => sub { &select(\@val, \@edit, $count); } 

也没用。

有没有办法获得调用子程序的小部件(所以我可以在相应的按钮中以某种方式存储必要的信息)或者在这样的调用中使用实际值($ count)?

最好的问候。

1 个答案:

答案 0 :(得分:4)

回调中的

my $caller = $Tk::widget;