Christoph Schnauß: Anordnung von Widgets mit pack() (Perl/TK)

Beitrag lesen

ups ...

vor lauter Begeisterung über das seltene Thema hab ich vergessen, genauer auf deine Frage einzugehen.

$o->Label(-text => 'Datei auswählen:')->pack(-side => 'left');
$o->Entry()->pack(-side => 'left');

hier könnte es hängen. "Entry()" ist normalerweise etwas, was hier genausowenig hergehört wie "Button" darunter. Die Zeile muß lauten:
$o->Label(-text => 'mach jetzt noch irgendwas')->pack(-side => 'left');

$o->Button(-text => 'Durchsuchen')->pack(-side => 'left');

was eben gesagt wurde, gilt natürlich auch hier.

Aus deinem Codeschnipsel geht auch nicht hervor, ob "$o" korrekt deklariert worden ist, etwa mit
my $o = MainWindow->new;

in der Doku zum Perl/Tk-Modul findest du folgenden Beispielcode:

#! Pfad/zum/Interpreter -w

use strict;
use Tk;

Take top, the bottom -> now implicit top is in the middle

my $main = MainWindow->new;
$main->Label(-text => 'At the top (default)')->pack;
$main->Label(-text => 'At the bottom')->pack(-side => 'bottom');
$main->Label(-text => 'The middle remains')->pack;

Since left and right are taken, bottom will not work...

my $top1 = $main->Toplevel;
$top1->Label(-text => 'Left')->pack(-side => 'left');
$top1->Label(-text => 'Right')->pack(-side => 'right');
$top1->Label(-text => '?Bottom?')->pack(-side => 'bottom');

But when you use frames, things work quite alright

my $top2 = $main->Toplevel;
my $frame = $top2->Frame;
$frame->pack;
$frame->Label(-text => 'Left2')->pack(-side => 'left');
$frame->Label(-text => 'Right2')->pack(-side => 'right');
$top2->Label(-text => 'Bottom2')->pack(-side => 'bottom');

MainLoop;

Christoph S.