如何在Perl/TK的子程序中获取调用者小部件?

3
在perl Tk中,我想问如何在使用-command选项时获取调用小部件。
我有一个对话框小部件,它是由先前未知数量的条目动态创建的。每个条目旁边都有一个按钮,可以浏览Entry中可能(有用的)字符串。
因此,如果按下第2个Entry旁边的按钮,则应将结果存储在第2个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个回答

4

在回调函数内部:

my $caller = $Tk::widget;

非常好,非常感谢。然而,这个解决方案看起来相当简单,但我在搜索时没有找到它。有人能解释一下$Tk::widget的含义吗? - Nemesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接