hallo zusammen,
ich habe das folgende problem mit meiner perl/tk-anwendung:
in meiner anwendung verwende ich ein notebook-steuerelement. auf der ersten angezeigten seite befinden sich ziemlich viele widgets, die mit hilfe von grid angeordnet sind (sieht prima aus).
auf den restlichen seiten befinden sich jeweils viel weniger widgets, ebenfalls mit grid angeordnet. das problem ist nun, dass die widgets nicht etwa in der linken oberen ecke des registerblattes liegen, sondern vielmehr von der mitte der registerseite her angeordnet werden. das sieht blöd aus. auch mit hilfe von frames und -expand => '1' sowie -fill => 'both' ist es mir nicht gelungen den block von widgets in die linke obere ecke zu bewegen!
kennt jemand eine lösung
danke helmut
User since
2003-08-11
409
Artikel
BenutzerIn
Hi und Willkommen im Forum!
Könntest Du uns evtl. ein bischen Code posten, weil ohne
Code ist es immer schwer zu helfen!
Gruß
Robby
Kaum macht man es richtig - schon funktioniert es!
User since
2003-09-23
5
Artikel
BenutzerIn
hallo robby,
werd' ich machen, wird aber ein bisschen dauern, bis ich einen funktionierenden teil rausgesucht habe (die anwendung hat bisher ca. 5000 zeilen).
danke
helmut
User since
2003-09-23
5
Artikel
BenutzerIn
hallo zusammen,
hier also ein code-fragment. auf der ersten registerseite, wie gesagt recht viele widgets und auf der zweiten seite nur wenige. wenn ihr das skript startet, stellt ihr fest, auf der zweiten seite befinden sich die widgets in der mitte der seite und nicht, wie ich es gerne hätte links oben.
vielleicht stell ich mich ja auch nur dumm an, aber auch wenn ich die widgets der zweiten seite in einen frame packe ändert sich nichts.
als hier der Code:
#!/usr/bin/perl -w
use Tk;
use Tk::NoteBook;
# Hauptfenster erzeugen
my $mw = MainWindow->new();
# Notebooksteuerelement mit zwei Registern erzeugen
my $noteb = $mw->NoteBook(-relief => 'flat',
-font =>'Helvetica 11 bold',
)->pack(-expand => 1,
-fill => 'both');
# Register erstellen
my $regEins = $noteb->add('Register 1',
-label => 'Register 1');
my $regZwei = $noteb->add('Register 2',
-label => 'Register 2');
# im ersten Register eine Reihe von Widgets erzeugen
my $lblEins= $regEins->Label(-text => 'Label 1',
-width => 13,
-anchor => 'w',
)->grid(-column => 0,
-row => 0,
-sticky => 'we',
-padx => 2,
-pady => 1);
my $txtEins = $regEins->Entry(-width => 20,
)->grid(-column => 1,
-row => 0,
-sticky => 'w',
-padx => 2,
-pady =>1);
my $lblZwei= $regEins->Label(-text => 'Label 2',
-width => 13,
-anchor => 'w',
)->grid(-column => 2,
-row => 0,
-sticky => 'we',
-padx => 2,
-pady => 1);
my $txtZwei = $regEins->Entry(-width => 20,
)->grid(-column => 3,
-row => 0,
-sticky => 'w',
-padx => 2,
-pady =>1);
my $lblDrei= $regEins->Label(-text => 'Label 3',
-width => 13,
-anchor => 'w',
)->grid(-column => 0,
-row => 1,
-sticky => 'we',
-padx => 2,
-pady => 1);
my $txtDrei = $regEins->Entry(-width => 20,
)->grid(-column => 1,
-row => 1,
-sticky => 'w',
-padx => 2,
-pady =>1);
my $lblVier= $regEins->Label(-text => 'Label 1',
-width => 13,
-anchor => 'w',
)->grid(-column => 0,
-row => 2,
-sticky => 'we',
-padx => 2,
-pady => 1);
my $txtVier = $regEins->Entry(-width => 20,
)->grid(-column => 1,
-row => 2,
-sticky => 'w',
-padx => 2,
-pady =>1);
# viel weniger Widgets auf dem zweiten Registern
my $lblFuenf= $regZwei->Label(-text => 'Label 5',
-width => 13,
-anchor => 'w',
)->grid(-column => 0,
-row => 0,
-sticky => 'we',
-padx => 2,
-pady => 1);
my $txtFuenf = $regZwei->Entry(-width => 20,
)->grid(-column => 1,
-row => 0,
-sticky => 'w',
-padx => 2,
-pady =>1);
# Hauptschleife
MainLoop();
User since
2003-08-11
409
Artikel
BenutzerIn
Hi,
bitte beim nächsten mal CODE - Tags verwenden ;)
Habs bisher nur mit dem pack-Manger hinbekommen (den benutz ich immer)...
in meinem Perl-Tk Buch hab ich nix gefunden wie das mit
dem grid-manager gehen soll...evtl. hilft Dir das schon weiter, ansonsten muss jemand anderes hier im Forum Dir helfen ;)
my $lblFuenf= $regZwei->Label(-text => 'Label 5',
-width => 13,
-anchor => 'nw',
)->pack(-side => 'left', -anchor => 'n');
my $txtFuenf = $regZwei->Entry(-width => 20,
)->pack(-side => 'left', -anchor => 'n');
Kaum macht man es richtig - schon funktioniert es!
User since
2003-08-11
457
Artikel
BenutzerIn
setzt mal
$regEins->gridColumnconfigure(3, -weight => 1);
$regEins->gridRowconfigure(3, -weight => 1);
$regZwei->gridColumnconfigure(2, -weight => 1);
$regZwei->gridRowconfigure(2, -weight => 1);
vor deine MainLoop()-Anweisung.
Der erste Parameter ist dabei die nächst leere Spalte bzw. Zeile.
Standardmäßig besitzt eine Spalte/Zeile einen
weight-Wert von
0, das bedeutet, dass die Zeilenhöhe/Spaltenbreite vom größten Widget bestimmt werden.
Da wir der nächst leeren Zeile/Spalte einen
weight-Wert von 1 zuweisen nimmt sich diese Zeile/Spalte den zur Verfügung stehenden Platz.
,,Das perlt aber heute wieder...'' -- Dittsche
User since
2003-09-23
5
Artikel
BenutzerIn
hallo coax,
heureka (also zu deutsch: klasse) es funzt!
danke
helmut