Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4657[/thread]

positionierung des grid

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2003-09-23 09:50
#43938 #43938
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
Robby
 2003-09-23 10:45
#43939 #43939
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
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!
helmut
 2003-09-23 11:05
#43940 #43940
User since
2003-09-23
5 Artikel
BenutzerIn
[default_avatar]
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
helmut
 2003-09-23 11:45
#43941 #43941
User since
2003-09-23
5 Artikel
BenutzerIn
[default_avatar]
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();
Robby
 2003-09-23 12:48
#43942 #43942
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
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 ;)

Code: (dl )
1
2
3
4
5
6
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!
coax
 2003-09-23 16:49
#43943 #43943
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
setzt mal
Code: (dl )
1
2
3
4
$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
helmut
 2003-09-23 17:59
#43944 #43944
User since
2003-09-23
5 Artikel
BenutzerIn
[default_avatar]
hallo coax,

heureka (also zu deutsch: klasse) es funzt!

danke

helmut
<< >> 7 Einträge, 1 Seite



View all threads created 2003-09-23 09:50.