Propagation de la taille du gestionnaire de géométrie de la grille de Tkinter (avec collant)

StackOverflow https://stackoverflow.com/questions/1441134

  •  10-07-2019
  •  | 
  •  

Question

Il me manque quelque chose sur la façon dont les tailles se propagent dans Tk. Essayez ceci:

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 à l'intérieur de frame2. label1 est plus étroit que label2, comme le montre le fond blanc. Mais frame1 et frame2 ont la même largeur, comme le montre leur bordure. Je pensais que le caractère collant étendrait label1 à la même largeur que son parent.

Si je mets label1 et label2 dans le même cadre, alors label1 est 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 qui me manque? Dans la vie réelle, j'ai des cadres imbriqués empilés qui ne se développent pas comme je le voudrais.

Merci, Dan

Était-ce utile?

La solution

Les lignes et les colonnes ont un "poids". qui décrit comment ils se développent ou se rétrécissent pour remplir un espace supplémentaire dans le maître. Par défaut, une ligne ou une colonne a une épaisseur de zéro, ce qui signifie que vous avez indiqué à l'étiquette de remplir la colonne, mais pas à la colonne de remplir le cadre principal.

Pour résoudre ce problème, attribuez un poids à la colonne. Tout entier positif fera dans ce cas particulier:

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

Pour plus d'informations sur grid , avec des exemples en ruby, tcl, perl et python, voir la page de grille sur tkdocs.com

Autres conseils

Cette solution avec colonnes et cadres fonctionne, mais pour que les étiquettes aient la même largeur dans une grille, vous n’avez pas besoin des cadres qui les entourent. Voir l'exemple ci-dessous

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top