Il existe trois moyens de placer des objets (widgets, canvas...) dans une fenêtre graphique : pack, grid et place.
Ces trois moyens sont exclusifs : on ne peut pas commencer à placer les objets dans notre fenêtre avec pack, et continuer avec place.
Pack place l'objet dans la fenêtre, sur le côté que l'on a optionellement précisé, puis ajuste la fenêtre à la taille de l'objet.
Reprenons l'exemple de départ :
>>> from Tkinter import * >>> fen1 = Tk() >>> bou1 = Button(fen1, text='Quitter', command =fen1.destroy)
On a alors placé ce bouton dans notre fenêtre, en ajustant cette dernière à la taille du bouton, par
>>> bou1.pack()
On peut ainsi préciser que l'on souhaite placer l'objet à gauche (LEFT), à droite (RIGHT), en haut (TOP) ou en bas (BOTTOM) de l'écran, en précisant la valeur de side :
>>> bou1.pack(side=LEFT)
On peut aussi réserver un espace autour de notre objet, comme suit :
>>> bou1.pack(side =RIGHT, padx =3, pady =5)
ce qui signifie que l'on souhaite une marge de 3 pixels en abscisse, et de 5 pixels en ordonnée, autour de notre bouton.
Dans le cas d’un formulaire, par exemple, on souhaite que nos widgets soient alignées le long d'une grille imaginaire.
On précisera, par exemple, que le texte "Age" est à placer en ligne 0, colonne 2, dans notre grille :
>>> txt3.grid(row=0,column=2)
D'où le code, répétitif, de cette petite fenêtre :
>>> from Tkinter import * >>> fen1 = Tk() >>> txt1 = Label(fen1, text = 'Nom : ') >>> txt2 = Label(fen1, text ='Prenom : ') >>> txt3 = Label(fen1, text ='Age : ') >>> entr1=Entry(fen1) >>> entr2=Entry(fen1) >>> entr3=Entry(fen1) >>> txt1.grid(row=0) >>> txt2.grid(row=1) >>> entr1.grid(row=0,column=1) >>> entr2.grid(row=1,column=1) >>> txt3.grid(row=0,column=2) >>> entr3.grid(row=0,column=3)
Tkinter ignore les lignes (ou les colonnes) vides, et fixe à 0 leurs valeurs quand elles sont absentes.
On peut encore préciser l'alignement dans la cellule : au nord (N), au sud (S), à l'est (O) ou à l'ouest (W), avec l'option sticky, par exemple :
>>> txt1.grid(row = 0, sticky = E)
L'étalement sur plusieurs lignes ou colonnes est possible, avec l'argument rowspan, ou columnspan.
Si on souhaite, par exemple, étaler sur trois lignes, à partir e la cellule (1 ;3), un canevas, avec une marge autour du canevas de 10 pixels en x, et de 5 en y :
>>> can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)