#!/usr/bin/perl use strict; use warnings; use Data::Dumper qw/Dumper/; use Tk; my $mw = tkinit(-width => 640, -height => 480); $mw->packPropagate(0); my $btn = $mw->Button(-text => 'show / hide left pane')->pack(); my $pane = $mw->Panedwindow()->pack(-fill => 'both', -expand => 1,); my $frame1 = $pane->Frame(-bg => 'blue'); my $canvas = $pane->Scrolled('Canvas', -bg => 'red', -scrollbars => 'se',); $pane->add($frame1, -width => 100,); $pane->add($canvas, -width => 400,); # -- canvas resize binding $canvas->Tk::bind('' => sub{ my @bbox = $canvas->bbox("all"); $canvas->configure(-scrollregion => [ @bbox ]); }); $btn->configure(-command => sub{ toogle_frame($frame1, $canvas, $pane); return 1; }); $mw->MainLoop(); sub toogle_frame { my $frame1 = shift or die('Missing frame'); my $frame2 = shift or die('Missing frame'); my $pane = shift or die('Missing pane'); if( scalar( @{$pane->panes()} ) == 2 ) { $pane->forget($frame1); }else{ $pane->add($frame1, -before => $frame2, -width => 100); } } # /toogle_frame