use strict; use warnings; use Tk; use Tk::NoteBook; # Main Entry my $top = MainWindow->new(); $top->title("Test"); my $nb = $top->NoteBook()->pack(-expand => 1, -fill => 'both'); InitializeNoteBookPage(\$nb, \$nb->add('page1', -label => 'Page 1'), "Label for Page 1"); InitializeNoteBookPage(\$nb, \$nb->add('page2', -label => 'Page 2'), "Label for Page 2"); Tk::MainLoop(); # Subroutines start here sub InitializeNoteBookPage{ my($nb, $nbpage, $label_description) = @_; # Widget Initialization my($_label_1) = $$nbpage->Label( -text => $label_description, ); my($_entry_1) = $$nbpage->Entry( -width => 0, ); # Geometry Management $_label_1->grid( -in => $$nbpage, -column => 1, -row => 1, -columnspan => 1, -ipadx => 0, -ipady => 0, -padx => 0, -pady => 0, -rowspan => 1, -sticky => "" ); $_entry_1->grid( -in => $$nbpage, -column => 2, -row => 1, -columnspan => 1, -ipadx => 0, -ipady => 0, -padx => 0, -pady => 0, -rowspan => 1, -sticky => "ew" ); # Resize Behavior $$nbpage->gridRowconfigure (1, -weight => 0, -minsize => 50, -pad => 0); $$nbpage->gridColumnconfigure(1, -weight => 0, -minsize => 400, -pad => 0); $$nbpage->gridColumnconfigure(2, -weight => 0, -minsize => 400, -pad => 0); # Event callbacks $_entry_1->bind("", sub { print $$nbpage->name()." ".$_entry_1->name()." KeyRelease fired\n"; } ); $$nb->pageconfigure($$nbpage->name(), -createcmd => sub { print "\n".$$nbpage->name()." created \n"; } ); $$nb->pageconfigure($$nbpage->name(), -raisecmd => sub { print "\n".$$nbpage->name()." raised \n"; print "Going to fire ".$$nbpage->name()." ".$_entry_1->name()."KeyRelease\n"; $_entry_1->focus(); # If this line is commented out, no event will be fired at all ?! $_entry_1->eventGenerate(""); print "Any thing happened ?\n"; } ); }