kayinstorm has asked for the wisdom of the Perl Monks concerning the following question:

How to I get the multiple listboxs to return the value selected? The listboxes are created with a hash and ran through a foreach loop to create them. Here is the code:

#!/usr/bin/perl use Tk; # Variables $bx_w = 80; %hash = ( "Test1" => [qw/a b c d/], "Test2" => [qw/e f g h/], ); $mw = MainWindow->new(); $mw->title("test"); $mw->minsize(qw/79 4/); #$mw->maxsize(qw/79 4/); my $lz_f = $mw->Frame()->pack(-side =>'top',); #&creation; foreach $label(keys %hash) { $lngth = $#{$hash{$label}}; $lbl = $lz_f->Label( -text => $label, -bg => 'white', -width => $bx_w, )->pack( -side => 'top', -expand => 'both', ); $lstbx = $lz_f->Listbox( -bg=>'lightgrey', -relief=>'flat', -height=>$lngth, -width=>$bx_w, )->pack( -side=>'top', ); $count=0; foreach $i ( 0 .. $#{ $hash{$label}} ) { $lstbx->insert($count, $hash{$label}[$i]); $count++; } } MainLoop();

Replies are listed 'Best First'.
Re: Perl Tk Hash and listbox question
by reneeb (Chaplain) on Mar 14, 2008 at 10:07 UTC
    You should use strict!

    This code prints the selected entry when you double click on the entry:
    #!/usr/bin/perl use strict; use warnings; use Tk; # Variables my $bx_w = 80; my %hash = ( "Test1" => [qw/a b c d/], "Test2" => [qw/e f g h/], ); my $mw = MainWindow->new(); $mw->title("test"); $mw->minsize(qw/79 4/); #$mw->maxsize(qw/79 4/); my $lz_f = $mw->Frame()->pack(-side =>'top',); #&creation; foreach my $label(keys %hash) { my $lngth = $#{$hash{$label}}; my $lbl = $lz_f->Label( -text => $label, -bg => 'white', -width => $bx_w, )->pack( -side => 'top', -expand => 'both', ); my $lstbx = $lz_f->Listbox( -bg=>'lightgrey', -relief=>'flat', -height=>$lngth, -width=>$bx_w, )->pack( -side=>'top', ); foreach my $i ( 0 .. $#{ $hash{$label}} ) { $lstbx->insert($i, $hash{$label}[$i]); } $lstbx->bind( '<Double-1>' => sub{ my ($index) = $lstbx->curselect +ion; print $lstbx->get($index) } ); } MainLoop();
      Thanks!! That is what I needed!!