2009-09-17 10 views
7

Mi manca qualcosa su come le dimensioni si propagano in Tk. Prova questo:Propagazione delle dimensioni del gestore della geometria della griglia Tkinter (con appiccicoso)

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

Se metto label1 e Label2 all'interno dello stesso telaio, quindi label1 esce 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) 

Che cosa mi manca? Nella vita reale, ho alcuni frame nidificati impilati che non si espandono come vorrei.

Grazie, Dan

risposta

8

righe e le colonne hanno "peso", che descrive come crescono o si riducono per riempire lo spazio in più nel master. Di default 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, dare alla colonna un peso. Qualsiasi numero intero positivo farà in questo caso specifico:

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

Per maggiori informazioni su grid, con esempi in rubino, TCL, Perl e Python, vedi the grid page on tkdocs.com

+0

Grazie. Nel programma reale, avevo provato ad aggiungere pesi, senza alcun effetto apparente. Tornerò e mi assicurerò di aggiungerli ai frame corretti. –

Problemi correlati