2013-01-24 2 views
3

in perl Tk -command 옵션을 사용할 때 호출 위젯을 얻는 방법을 묻고 싶습니다.Perl/TK의 서브 루틴에서 호출자 위젯을 얻으려면 어떻게해야합니까?

나는 이전에 알려지지 않은 수의 항목으로 동적으로 만들어진 대화 상자 위젯을 가지고 있습니다. 엔트리 - 위젯이 있으며 각 엔트리의 가능한 (유용한) 문자열을 탐색 할 수있는 버튼 옆에 있습니다.

따라서 두 번째 항목 옆에있는 단추를 누르면 결과가 두 번째 항목에 저장되어야합니다.

코드는 다음과 같습니다.

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

관련 문제