#!/usr/bin/perl use Tk; use Tk::Canvas; use Tk::Label; my $mw = tkinit(-title, 'Canvas'); $mw->geometry('250x500'); my $frame = $mw->Frame(-width, 250, -height, 250)->pack(-fill, 'both', -expand,1); my $canvas = $frame->Scrolled('Canvas', -width, 300, -height, 300, -bg=>'white', -scrollbars, 'osoe' )->pack(-fill,'both',-expand,1); my $btn = $mw->Button(-text, "Add Stuff", -command,\&addStuff) ->pack(); my $btn1 = $mw->Button(-text, "Add More Stuff", -command,\&addmoreStuff) ->pack(); MainLoop; sub addStuff{ $canvas->createText(500, 500, -text, "Some text @ 500, 500." ); $canvas->createRectangle( 50, 50, 110, 110, -fill, 'red'); $canvas->createRectangle( 150, 150, 210, 210, -fill, 'green'); $canvas->createRectangle( 250, 250, 310, 310, -fill, 'blue'); $canvas->createText(20, 20, -text, "Some text @ 20, 20." ); # # Your can use an array for your bounding box # commented out to show both ways to set the scrollregion # Just make sure you are 1 less on lower right and bottom # Or you will have out of bounds array... easy to forget # if you don't use a frame with your canvas $canvas->configure(-scrollregion => [ 0, 0, 599, 599]); # $canvas->configure(-scrollregion => [$canvas->bbox('all')]); } sub addmoreStuff{ $canvas->createText(1500, 1500, -text, "Some text @ 1500, 1500." ); $canvas->createRectangle( 5000, 5000, 1100, 1100, -fill, 'red'); $canvas->createRectangle( 1500, 1500, 2100, 2100, -fill, 'green'); $canvas->createRectangle( 2500, 2500, 3100, 3100, -fill, 'blue'); $canvas->createText(2000, 10, -text, "Some text @ 2000, 10." ); # # Your can use an array for your bounding box # commented out to show both ways to set the scrollregion # Just make sure you are 1 less on lower right and bottom # Or you will have out of bounds array... easy to forget # if you don't use a frame with your canvas #$canvas->configure(-scrollregion => [ 0, 0, 599, 599]); $canvas->configure(-scrollregion => [$canvas->bbox('all')]); }