#!perl5 -w # # Example donated by Joerg-Stefan Ralf # use Tk; use Tk::Pane; sub INIT { $anchor_var = 'nw'; @list = (':I\'m Label 1:L', ':I\'m Label 2:L', 'jump to 1st Header:I\'m Header 1:H:::w', 'a:I\'m Radiobutton 1:R:v1=1,v2=2,v3=3,v4=4,v5=5,v6=6,v7=7:1', 'b:I\'m Radiobutton 1-1:R:v1=1,v2=2,v3=3,v4=4,v5=5,v6=6,v7=7:7', 'c:I\'m Radiobutton 1-2:R:v1=1,v2=2,v3=3,v4=4,v5=5,v6=6,v7=7:6', ':I\'m Label 3:L', ':I\'m Label 3.1:L', ':I\'m Label 3.2:L', ':I\'m Label 3.3:L', ':I\'m Label 3.4:L', ':I\'m Label 3.5:L', ':I\'m Label 3.6:L', ':I\'m Label 4:L', ':I\'m Label 5:L', 'jump to 2st Header:I\'m Header 2:H:::e', ':I\'m Label 6:L', ':I\'m Label 6.1:L', ':I\'m Label 6.2:L', ':I\'m Label 6.3:L', ':I\'m Label 6.4:L', ':I\'m Label 6.5:L', ':I\'m Entry 1:E', ':I\'m Label 7:L', ':I\'m Label 7.1:L', ':I\'m Label 7.2:L', 'jump to 3st Header:I\'m Header 3:H:::center', 'd:I\'m Radiobutton 2:R:v1=1,v2=2,v3=3,v4=4,v5=5,v6=6,v7=7:2', ':I\'m Entry 2:L', ':I\'m Label 8:L', ':I\'m Label 8.1:L', ':I\'m Label 8.2:L', ':I\'m Label 8.3:L', ':I\'m Label 8.4:L', 'jump to 4st Header:I\'m Header 4:H:::w', 'e:I\'m Radiobutton 3:R:v1=1,v2=2,v3=3,v4=4,v5=5,v6=6,v7=7:3', ':I\'m Label 9:L', ':I\'m Label 9.1:L', ':I\'m Label 9.2:L', ':I\'m Label 9.3:L', ':I\'m Label 9.4:L', ':I\'m Label 9.5:L', ':I\'m Label 9.6:L', ':I\'m Label 9.7:L' ); } sub CREATE_WIDGs { sub Sunk_Frame { return $SFrame -> Frame (-relief => 'sunken', -borderwidth => 4, )->pack(-expand => 1, -fill => 'x'); } foreach $w (@list) { my ($ident,$name,$widgtype,$radiob,$radiod,$header_anchor) = split (/:/,$w); if ($widgtype eq 'H') { my $tag =$SFrame -> Label (-text => " $name", -width => 20 # to explain -anchor ne or se ) -> pack (-anchor => $header_anchor); $Frame_top -> Button (-text => "$ident", -command => sub {$SFrame -> see($tag, -anchor => "$anchor_var")} ) -> pack (); $SunkFrame = Sunk_Frame; } else { $SunkFrame = Sunk_Frame if (not defined $SunkFrame); $SFrame2 = $SunkFrame -> Frame() -> pack(-anchor => 'w'); if ($widgtype eq 'E') { $hashev{$ident} = ""; $hashe{$ident} = $SFrame2 -> Entry (-textvariable => \$hashev{$ident}, -width => 60) -> pack (-side => 'left'); } elsif ($widgtype eq 'L') { $SFrame2 -> Label (-text => " $name") -> pack (-anchor => 'w'); } else { my($x_i) = 170; my(@ii) = split (/,/,$radiob); foreach $i (@ii) { ($vname,$value) = split (/=/,$i); $hashe{"$ident.$vname"} = $SFrame2 -> Radiobutton (-text => "$vname", -variable => \$hashev{"$ident"}, -value => "$value") -> pack (-side => 'left'); } $hashev{"$ident"} = $radiod; } } } } main: { &INIT; $top = MainWindow -> new (); $Frame_top = $top -> Frame (-relief => 'raised', -borderwidth => 5); # Radionbutton to select anchor $Frame_anchor = $top -> Frame (); $Frame_anchor1 = $Frame_anchor -> Frame (); $Frame_anchor2 = $Frame_anchor -> Frame (); $Frame_anchor3 = $Frame_anchor -> Frame (); $Frame_anchor1 -> Radiobutton (-text => "nw", -variable => \$anchor_var, -width => 3, -value => "nw") -> pack (-side => 'left'); $Frame_anchor1 -> Radiobutton (-text => "n ", -width => 3, -variable => \$anchor_var, -value => "n") -> pack (-side => 'left'); $Frame_anchor1 -> Radiobutton (-text => "ne", -width => 3, -variable => \$anchor_var, -value => "ne") -> pack (-side => 'left'); $Frame_anchor2 -> Radiobutton (-text => "w ", -width => 3, -variable => \$anchor_var, -value => "w") -> pack (-side => 'left'); $Frame_anchor2 -> Radiobutton (-text => "c", -width => 3, -variable => \$anchor_var, -value => "center") -> pack (-side => 'left'); $Frame_anchor2 -> Radiobutton (-text => "e ", -width => 3, -variable => \$anchor_var, -value => "e") -> pack (-side => 'left'); $Frame_anchor3 -> Radiobutton (-text => "sw", -width => 3, -variable => \$anchor_var, -value => "sw") -> pack (-side => 'left'); $Frame_anchor3 -> Radiobutton (-text => "s", -width => 3, -variable => \$anchor_var, -value => "s") -> pack (-side => 'left'); $Frame_anchor3 -> Radiobutton (-text => "se", -width => 3, -variable => \$anchor_var, -value => "se") -> pack (-side => 'left'); #----- ScrolledFrame -------------------------------------------------------------------- $SFrame = $top -> Scrolled('Pane', -scrollbars => 'ose', -sticky => 'we', # what is this command doing ? -gridded => 'y'); # what is this command doing ? #----- Widgets in ScrolledFrame --------------------------------------------------------- &CREATE_WIDGs; #----- Buttons at the bottom ---------------------------------------------------- $frame = $top -> Frame (-relief => 'raised', -borderwidth => 5); $frame -> Button (-text => "EXIT", -command => sub {exit 0}, # -fill => 'x' )->pack(-side => 'right'); #----- pack Widgets ------------------------------------------------------------- $Frame_anchor1 ->pack(-side => 'top', -fill => 'x'); $Frame_anchor2 ->pack(-side => 'top', -fill => 'x'); $Frame_anchor3 ->pack(-side => 'top', -fill => 'x'); $top -> Label (-textvariable => \$anchor_var)-> pack(); $Frame_anchor ->pack(-side => 'top', -fill => 'x'); $Frame_top->pack(-side => 'top', -fill => 'x'); $frame -> pack(-side => 'bottom', -fill => 'x'); $SFrame ->pack(-expand => 1, -fill => 'both');; #----- modify window manager ---------------------------------------------------- $top -> wm ("title" , "Pane.pm method ->see\(\) demo"); $top -> wm ("geometry" , "550x500"); # make mainwindow small #----- start event loop --------------------------------------------------------- MainLoop; }