2009-09-17 18 views
7

Il me manque quelque chose sur la façon dont les tailles se propagent en Tk. Essayez ceci:Tkinter grid geometry manager taille propagation (avec sticky)

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 est à l'intérieur de frame1, et label2 est à l'intérieur frame2. Label1 sort plus étroit que label2, comme vu par le fond blanc. Mais frame1 et frame2 ont la même largeur, comme vu par leurs frontières. Je pensais que la rigidité étendrait label1 pour avoir la même largeur que son parent.

Si je mets label1 et label2 dans le même cadre, puis label1 sort aussi large que 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) 

Qu'est-ce que je manque? Dans la vraie vie, j'ai quelques cadres imbriqués empilés qui ne sont pas en expansion comme je le voudrais.

Merci, Dan

Répondre

8

lignes et des colonnes ont « poids » qui décrit la façon dont ils se développent ou se rétractent pour remplir l'espace supplémentaire dans le maître. Par défaut, une ligne ou une colonne a un poids de zéro, ce qui signifie que vous avez demandé à l'étiquette de remplir la colonne mais que vous n'avez pas demandé à la colonne de remplir le cadre principal.

Pour corriger cela, donnez un poids à la colonne. Tout entier positif fera dans ce cas précis:

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

Pour plus d'informations sur grid, avec des exemples en rubis, tcl, Perl et Python, voir the grid page on tkdocs.com

+0

Merci. Dans le vrai programme, j'avais essayé d'ajouter des poids, sans effet apparent. Je vais revenir en arrière et m'assurer que je les ajoute aux bons cadres. –