3

perl Tkで、-commandオプションを使用するときに呼び出し元ウィジェットを取得する方法を尋ねたいと思います。

以前は不明な数のエントリによって動的に作成されたダイアログウィジェットがあります。エントリウィジェットがあり、それぞれの横にエントリの可能な(便利な)文字列を参照できるボタンがあります。

したがって、2番目のエントリの横にあるボタンを押すと、結果は2番目のエントリなどに保存されます。

コードは次のようになります。

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)を使用する方法はありますか?

よろしくお願いします。

4

1 に答える 1

4

コールバック内:

my $caller = $Tk::widget;
于 2013-01-24T21:27:32.890 に答える