2016-07-04 2 views
1

Ich versuche, ein Tk-Fenster zu erstellen, das zwei Frames hat. Zuerst oben und dann unten. Der Rahmen oben sollte ein Textfeld enthalten, das den gesamten Rahmen ausfüllen muss.Tcl/Tk: Wie Frame automatisch erweitern, um eine Zeile im Raster zu füllen

Aber mit dem Code unten fand ich, dass der Rahmen nur die Hälfte füllt das Fenster und das Textfeld ist nur die Hälfte füllt den Rahmen. Ich verwende den Grid-Ansatz, so dass er automatisch erweitert wird, aber er hat sich weder automatisch erweitert noch haben die Widgets ihre jeweiligen Container ausgefüllt. Ich bin wodnering, wenn das Gitter approch für diesen Zweck richtig ist?

namespace eval RESTLogVwr {} 
toplevel .t 
wm geometry .t 1500x800+10+10 
wm resizable .t 0 0 
grid rowconfigure .t 2 -weight 1 
frame .t.f1 -bd 2 -relief groove -bg blue 
text .t.f1.text -state disabled -bg black 
pack .t.f1.text -fill both -expand 0 
grid config .t.f1 -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew" 
grid config .t.f1.text -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew" 
grid rowconfigure .t 2 -weight 1 

Antwort

2
toplevel .t 
wm geometry .t 1500x800+10+10 
wm resizable .t 0 0 
frame .t.f1 -bd 2 -relief groove -bg blue 
text .t.f1.text -state disabled -bg black 
pack .t.f1.text -fill both -expand 0 

Hier .t.f1.text bereits verwaltet von pack: Sie müssen nicht durch grid verwalten müssen.

grid .t.f1 -row 2 -column 3 -sticky snew 
grid rowconfigure .t .t.f1 -weight 1 
grid columnconfigure .t .t.f1 -weight 1 

Wenn Sie das Gewicht für Spalte und Zeile festlegen, aktivieren Sie die Erweiterung des Rahmens in beiden Dimensionen.

Dokumentation: frame (widget), grid, pack, text (widget), toplevel, wm

1

Das Problem ist, dass Sie .t.f1 die Zeile mit Rahmen gefragt haben, zu erweitern, aber noch nicht die Zeile mit Text .t.f1.text zu erweitern gefragt. (Die -sticky Option beschreibt, wie die Widgets zu dem Raum erweitert werden, den sie erhalten haben, aber nicht wie viel Platz der Zelle, die das Widget enthält, an erster Stelle.)

Ich vermute, dass das Problem das ist Sie sagen:

zweimal, das ist redundant und ein Hinweis, dass Sie die Konfiguration falsch haben; Ändern Sie die Sekunden ein (am Ende Ihrer Beispielskript) zu, dies zu beheben Dinge:

grid rowconfigure .t.f1 2 -weight 1 

Allgemeine Punkt: Ich finde es Gittern zu halten so flach wie möglich hilft, wenn die Dinge entwerfen und (wenn nötig auf Papier) herauszuziehen, wo die Zellgrenzen liegen sollen. Jedes Level benötigt sein eigenes Design und nur sehr komplizierte Designs (wo ich die Komplexität überhaupt nicht verwenden möchte) benötigen zusätzliche Frames.

+0

Dank Donal. Es hilft, zum unteren Rand des Fensters zu gelangen, aber nicht zum rechten Rand. Wenn ich den Aufruf "wm geometry .t 1500x800 + 10 + 10" lösche, wird es vollständig auf alle Rahmen erweitert. Kann ich etwas tun, um nach unten zu expandieren? Ich habe versucht, an der Eigenschaft column span zu arbeiten, aber es hat nicht funktioniert. – BabyGroot

Verwandte Themen