2013-01-24 27 views
3

in perl Tk我想問一下如何在使用-command選項時獲取調用小部件。如何從Perl/TK中的子例程獲取調用者小部件?

我有一個對話框小部件是由以前未知數量的條目動態創建的。有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++; 
} 

然而,由於&選擇被稱爲後完成對話框中建$數總是在最後的價值,我沒有得到的信息,我已經按了哪個鍵。行如

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

也沒有工作。

是否有某種方法可以獲得調用子例程的窗口小部件(這樣我就可以在各自的按鈕中以某種方式存儲必要的信息),或者在這種調用中使用實際值(這裏是$ count)?

此致敬禮。

回答

4

回調中:

my $caller = $Tk::widget; 
+0

完美,非常感謝。不過,這個解決方案看起來很簡單,但我在搜索時沒有找到這個。有人可以解釋$ Tk :: widget的含義嗎? – Nemesis

相關問題