logo oujood
🔍

Le gestionnaire grid() Tkinter

grid() place les widgets dans un tableau de lignes et de colonnes. C'est le gestionnaire à privilégier pour les formulaires et les interfaces structurées.

OUJOOD.COM

Là où pack() empile les widgets en séquence, grid() les positionne dans un tableau invisible de lignes et de colonnes. C'est le gestionnaire naturel pour les formulaires, les calculatrices ou tout ce qui demande un alignement précis en colonnes.

Principe de base : row et column

Chaque widget reçoit une position sous forme de numéro de ligne et de colonne. La numérotation commence à 0 :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.title("Formulaire simple")
fenetre.geometry("320x180")

# Colonne 0 : labels — Colonne 1 : champs
tk.Label(fenetre, text="Prénom :").grid(row=0, column=0, sticky="e", padx=10, pady=8)
tk.Entry(fenetre, width=22).grid(row=0, column=1, padx=5)

tk.Label(fenetre, text="Nom :").grid(row=1, column=0, sticky="e", padx=10, pady=8)
tk.Entry(fenetre, width=22).grid(row=1, column=1, padx=5)

tk.Label(fenetre, text="Email :").grid(row=2, column=0, sticky="e", padx=10, pady=8)
tk.Entry(fenetre, width=22).grid(row=2, column=1, padx=5)

tk.Button(fenetre, text="Envoyer").grid(row=3, column=1, sticky="e", padx=5, pady=10)

fenetre.mainloop()

sticky="e" colle le widget sur le bord est (droite) de sa cellule — ce qui aligne naturellement les labels à droite, en face de leurs champs. Sans sticky, chaque widget est centré dans sa cellule.

sticky : les huit directions

sticky accepte les points cardinaux seuls ou combinés. La combinaison la plus courante est "ew" pour étirer horizontalement, ou "nsew" pour remplir toute la cellule :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("360x160")

tk.Label(fenetre, text="Message :").grid(row=0, column=0, sticky="ne", padx=10, pady=10)

# La zone texte s'étire pour remplir sa cellule
zone = tk.Text(fenetre, width=28, height=4)
zone.grid(row=0, column=1, sticky="nsew", padx=5, pady=10)

# La colonne 1 s'étire quand la fenêtre est agrandie
fenetre.columnconfigure(1, weight=1)

fenetre.mainloop()

sticky="ne" sur le label le colle en haut à droite de sa cellule — il reste aligné avec le haut de la zone de texte même si la cellule grandit. sticky="nsew" sur la zone texte l'étire dans les quatre directions.

columnspan et rowspan

Un widget peut occuper plusieurs colonnes ou plusieurs lignes en même temps :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("360x200")

tk.Label(fenetre, text="Titre du formulaire", font=("Arial", 13, "bold")).grid(
    row=0, column=0, columnspan=2, pady=12  # s'étale sur 2 colonnes
)

tk.Label(fenetre, text="Nom :").grid(row=1, column=0, sticky="e", padx=10, pady=6)
tk.Entry(fenetre, width=22).grid(row=1, column=1, padx=5)

tk.Label(fenetre, text="Ville :").grid(row=2, column=0, sticky="e", padx=10, pady=6)
tk.Entry(fenetre, width=22).grid(row=2, column=1, padx=5)

# Bouton centré sur les 2 colonnes
tk.Button(fenetre, text="Valider", width=16).grid(
    row=3, column=0, columnspan=2, pady=12
)

fenetre.mainloop()

columnconfigure et rowconfigure

Par défaut, les colonnes et lignes de la grille ne s'adaptent pas quand la fenêtre est redimensionnée. columnconfigure() et rowconfigure() avec weight corrigent ça :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("400x200")

zone = tk.Text(fenetre, width=40, height=6)
zone.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)

# La ligne 0 et la colonne 0 prennent tout l'espace disponible
fenetre.rowconfigure(0, weight=1)
fenetre.columnconfigure(0, weight=1)

fenetre.mainloop()

Le paramètre weight est un ratio : si deux colonnes ont respectivement weight=1 et weight=2, la seconde prend deux fois plus d'espace lors du redimensionnement. C'est l'équivalent de flex-grow en CSS.

Pour les cas où ni pack() ni grid() ne conviennent — positionnement absolu pixel par pixel — la page sur place() couvre cette option. Et si vous hésitez encore entre les trois, la page pack, grid ou place : lequel choisir ? donne les critères de décision.

Par carabde | Mis à jour le 30 avril 2025