in reply to Enter Key focus is not happening
Your code, as you wrote above in html, is missing all the brackets needed to specify array elements. The code I believe you meant to post, as reconstructed by me, is shown below. I had to remove your resizable and geometry lines to get the Entries to show up, and I made the bg color white on the Entries for ease of visibility.
As far as getting focus to shift the way you want, I'm stumped, maybe a smarter monk may know. It may be in the way Table is designed. An alternative would be to use TableMatrix, see the second code example below.
Your corrected, runnable code:
#!/usr/bin/perl use Tk; use Tk::Entry; use Tk::Table; use Tk::LabFrame; use warnings; use strict; my $v="0.00"; my $mw = MainWindow->new; #$mw->geometry("200x200"); #$mw->resizable(0,0); $mw->title("Table Example"); my @id=qw/100 101 102 103 104 105 106 107 108 109 110/; my @name=qw/AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK/; my @top2=qw/No Name Amount/; my $table_frame = $mw->LabFrame()->pack(); my $table = $table_frame->Table(-columns => 10, -rows => 6, -fixedrows => 1, -scrollbars => 'oe', -relief => 'raised',-background=>'white'); my $j=0; my $i=0; foreach my $j(1..11) { my $tmp_label=$table->Label(-text => $id[$i], -width => 8, -relief =>'raised'); my $tmp_label1 = $table->Label(-text => $name[$i], -width => 8, -relief =>'raised'); my $tmp_label2= $table->Entry( -width => 8, -relief =>'raised', -bg => 'white', -validate=>'key',-validatecommand=>sub{ $_[1] =~m/\d\d/} , -invalidcommand=>sub{$mw->bell} ); $tmp_label2->bind('Tk::Entry','<Return>',sub{shift->focusNext}); $table->put($j,1,$tmp_label); $table->put($j,2,$tmp_label1); $table->put($j,3,$tmp_label2); $i++; } $table->pack(); my $button_frame = $mw->Frame( -borderwidth => 4 )->pack(); $button_frame->Button(-text => "Exit", -command => sub {exit})->pack() +; MainLoop;
An alternative using TableMatrix, in which focus is passed the way you want by tabbing:
#!/usr/bin/perl use Tk; use Tk::TableMatrix; use warnings; use strict; my $mw = MainWindow->new; my $table = $mw->Scrolled("TableMatrix", -resizeborders=>'both', -titlerows => 1, -rows => 20, -colstretchmode=>'all', -cols => 3, -cache => 1, -scrollbars => "osoe"); for(my $row = 1; $row < 20; $row++) { my $entry = $table->Entry(-bg=>'white'); $table->windowConfigure("$row,5", -window => $entry); } $table->set("0,0", "Col 1"); $table->set("0,1", "Col 2"); $table->set("0,2", "Col 3"); $table->set("0,3", "Col 4"); $table->set("0,4", "Col 5"); $table->pack(-expand => 1, -fill => 'both'); MainLoop;
|
|---|