Frage

Ich vermisse etwas darüber, wie Größen propagieren in Tk. Versuchen Sie folgendes:

from Tkinter import *

root = Tk()

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
frame2 = Frame(root, border=4, relief=RIDGE)
frame2.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame2, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

root.mainloop()

label1 ist innerhalb frame1 und label2 ist innerhalb frame2. label1 kommt schmaler als label2, wie durch den weißen Hintergrund zu sehen. Aber frame1 und frame2 sind die gleiche Breite, wie durch ihre Grenzen gesehen. Ich dachte, die Klebrigkeit würde erweitern label1 die gleiche Breite wie seine Eltern sein.

Wenn ich label1 und label2 im gleichen Rahmen setzen, dann label1 so breit wie label2 kommt aus:

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame1, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

Was bin ich? Im wirklichen Leben habe ich einige verschachtelten Frames gestapelt, die nicht erweitert werden, wie ich möchte.

Danke, Dan

War es hilfreich?

Lösung

Zeilen und Spalten haben „Gewicht“, das beschreibt, wie sie wachsen oder schrumpfen zusätzlichen Platz im Master zu füllen. Standardmäßig hat eine Zeile oder Spalte ein Gewicht von Null, was bedeutet, dass Sie das Etikett erzählt habe die Spalte zu füllen, aber sie haben nicht die Spalte sagte der Master-Rahmen zu füllen.

Um dies zu beheben, geben Sie die Spalte ein Gewicht. Jede positive ganze Zahl wird in diesem speziellen Fall tun:

frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)

Für weitere Informationen über grid mit Beispielen in Ruby, Tcl, Perl und Python finden Sie unter Netz Seite auf tkdocs.com

Andere Tipps

Diese Lösung mit Spalten und Rahmen funktioniert, aber zu bekommen Etiketten die gleiche Breite in einem Raster zu haben, müssen Sie die umschließenden Rahmen nicht benötigen. Siehe unten Beispiel

from tkinter import *

root = Tk()

label1 = Label(root, text='short', bg='light green', relief=RIDGE)
label1.grid(sticky=E+W)
label2 = Label(root, text='quite a bit longer', bg='light green', relief=RIDGE)
label2.grid(sticky=E+W)

root.mainloop()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top