Maik Görgens: Anordnung von Widgets mit pack() (Perl/TK)

Hallo!

Ich hab grad ein Problem damit, in einem Tk-Programm folgende Anordnung der Widgets mit pack() zu erreichen:

Label | Entry | Button
----------------------
Label | Entry | Button

Ich habe folgenden Code (der allerdings nicht die gewünschte Anordnung erzeugt):

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

$o->Label(-text => 'Ordner auswählen:')->pack(-side => 'bottom');
$o->Entry()->pack(-side => 'left');
$o->Button(-text => 'Durchsuchen')->pack(-side => 'left');
##################################################################

Ich weiß, das das mit grid() einfacher zu lösen sein dürfte, aber ich brauche eine Lösung für pack().

Viele Grüße
   Maik Görgens

  1. hi,

    Ich weiß, das das mit grid() einfacher zu lösen sein dürfte, aber ich brauche eine Lösung für pack().

    richtig. In dem Codeschnipsel steht auch nicht, welchen Geometriemanager du nehmen möchtest  -  grid ist nur einer von mehreren möglichen (und aus meiner Sicht nicht einmal der wichtigste), pack ist dagegen der Packer.

    Ohne einen Geometriemanager gehts halt nicht. Ohne den Packer auch nicht.

    Grüße aus Berlin

    Christoph S.

    PS:
    vor zwei Tagen erst hat Calocybe nachgefragt, was TCL ist. Wenn nun meine Suchfunktion alles angezeigt hat, habe ich gefunden, daß wir in den letzten drei Jahren genau drei Nachfragen zu diesem scheinbar sehr "speziellen" Thema hatten. Ich will mehr davon !

  2. 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.