in reply to Multiple Tk::Graphs with Tk::Notebook widget

Hi, sometimes with notebook, you have to use the -raisecmd option for the tabs. Here is a working version of your script. I just minimally hacked it to make it work, but it demonstrates the principle. You probably need to redesign the "add tabs" part , and put it in a loop, storing your data and objects in a hash. Anyways, this works, but needs improving. (I know this is'nt obvious, I happened to know it by previous hacking with notebook)
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::Graph; use Tk::NoteBook; my $data = { Sleep => 51, Work => 135, Access => 124, mySQL => 5 }; my $to_register = { 'one' => [ 0, 5, 4, 8, 6, 8 ], 'two' => [ 2, 5, 9, 4, 6, 2 ], 'three' => [ 0, 5, 6, 8, 6, 8 ], }; my $data1 = { 'one' => 3, 'two' => 3, 'three' => 3, }; my $mw = MainWindow->new; my $nb = $mw->NoteBook( -ipadx => 10, -ipady => 10, )->pack( -side => 'top', -expand => '1', -fill => 'both' ); ############# PAGE 1 ############# my $page1 = $nb->add( "page1", -label => " Page1 ", -raisecmd => sub{ $mw->update; }, ); my $graph = $page1->Graph( -type => 'BARS' )->pack( -expand => 1, -fill => 'both' ); $graph->configure( -variable => $data ); $graph->set($data); ############# PAGE 2 ############# my $graph1; my $graph1_set = 0; my $page2; $page2 = $nb->add( "page2", -label => " Page2 ", -raisecmd => sub{ return if $graph1_set; $graph1 = $page2->Graph( -type => 'Line', -max => 10, -look => 10, )->pack( -expand => 1, -fill => 'both' ); $graph1->register($to_register); $graph1->variable($data1); $mw->update; $graph1_set = 1; }, ); MainLoop;

I'm not really a human, but I play one on earth. flash japh

Replies are listed 'Best First'.
Re^2: Multiple Tk::Graphs with Tk::Notebook widget
by mhearse (Chaplain) on May 02, 2005 at 18:23 UTC
    You solution makes good sense (and works great). I guess the -raisecmd option allows you to redraw the graph when the tab is clicked. Without it, I assume all the graphs will be drawn only once at runtime. Another lesson learned. Many thanks.