Domanda

Mi manca qualcosa su come le dimensioni si propagano in Tk. Prova questo:

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 è all'interno di frame1 e label2 è all'interno di frame2. label1 risulta più stretto di label2, come si vede dallo sfondo bianco. Ma frame1 e frame2 hanno la stessa larghezza, visti dai loro bordi. Ho pensato che la viscosità avrebbe espanso label1 per avere la stessa larghezza del suo genitore.

Se inserisco label1 ed label2 all'interno dello stesso frame, allora label1 risulta largo quanto label2:

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)

Cosa mi sto perdendo? Nella vita reale, ho alcuni frame nidificati sovrapposti che non si espandono come vorrei.

Grazie, Dan

È stato utile?

Soluzione

Le righe e le colonne hanno "peso" che descrive come crescono o si restringono per riempire lo spazio extra nel master. Per impostazione predefinita, una riga o una colonna ha un peso pari a zero, il che significa che hai detto all'etichetta di riempire la colonna ma non hai detto alla colonna di riempire il frame principale.

Per risolvere questo problema, assegna un peso alla colonna. Qualsiasi numero intero positivo farà in questo caso specifico:

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

Per ulteriori informazioni su grid , con esempi in ruby, tcl, perl e python, vedere la pagina della griglia su tkdocs.com

Altri suggerimenti

Questa soluzione con colonne e frame funziona, ma per ottenere etichette con la stessa larghezza in una griglia, non sono necessari i frame inclusi. Vedi l'esempio seguente

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top