logo oujood
🔍

Définir la taille d'une fenêtre Tkinter

geometry(), minsize(), maxsize(), resizable() — tout pour maîtriser les dimensions de votre fenêtre Tkinter et la positionner précisément sur l'écran.

OUJOOD.COM

Par défaut, une fenêtre Tkinter prend la taille minimale nécessaire pour contenir ses widgets. Dès qu'on veut un comportement précis — dimensions fixes, taille minimale, position à l'écran — quelques méthodes suffisent à tout contrôler.

geometry() — taille et position

La méthode geometry() accepte une chaîne au format "LargeurxHauteur+X+Y" :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()

# Taille seulement
fenetre.geometry("600x400")

# Taille + position depuis le coin supérieur gauche de l'écran
fenetre.geometry("600x400+100+50")

# Position seulement — ne modifie pas la taille actuelle
fenetre.geometry("+200+100")

fenetre.mainloop()

Les valeurs +X+Y sont des décalages depuis le coin supérieur gauche de l'écran. Un décalage négatif est techniquement possible mais sort partiellement la fenêtre de l'écran — à éviter.

Centrer la fenêtre sur l'écran

Il n'existe pas de méthode center() — on calcule la position manuellement à partir des dimensions de l'écran :

📋 Copier le code

import tkinter as tk

def centrer_fenetre(fen, largeur, hauteur):
    fen.update_idletasks()  # s'assure que les dimensions sont calculées
    ecran_l = fen.winfo_screenwidth()
    ecran_h = fen.winfo_screenheight()
    x = (ecran_l - largeur)  // 2
    y = (ecran_h - hauteur)  // 2
    fen.geometry(f"{largeur}x{hauteur}+{x}+{y}")

fenetre = tk.Tk()
fenetre.title("Fenêtre centrée")
centrer_fenetre(fenetre, 500, 350)

tk.Label(fenetre, text="Cette fenêtre est centrée", font=("Arial", 13)).pack(expand=True)

fenetre.mainloop()

winfo_screenwidth() et winfo_screenheight() retournent les dimensions en pixels de l'écran principal. update_idletasks() force Tkinter à traiter les tâches en attente pour que les dimensions de la fenêtre soient disponibles avant le calcul.

minsize, maxsize et resizable

Ces trois méthodes contraignent le redimensionnement par l'utilisateur :

📋 Copier le code

import tkinter as tk

fenetre = tk.Tk()
fenetre.geometry("500x350")

# Taille minimale : la fenêtre ne peut pas être plus petite
fenetre.minsize(300, 200)

# Taille maximale : la fenêtre ne peut pas être plus grande
fenetre.maxsize(800, 600)

# Bloquer le redimensionnement : (largeur, hauteur) — False bloque
# fenetre.resizable(False, False)  # complètement fixe
# fenetre.resizable(True, False)   # largeur libre, hauteur fixe

tk.Label(fenetre, text=f"Redimensionnable entre 300×200 et 800×600",
         font=("Arial", 11), wraplength=350).pack(expand=True)

fenetre.mainloop()

resizable(w, h) prend deux booléens — le premier pour la largeur, le second pour la hauteur. resizable(False, False) est la combinaison utilisée avec place() pour les interfaces à taille fixe. Bloquer seulement la hauteur (resizable(True, False)) est utile pour les barres d'outils ou les palettes.

Récupérer les dimensions courantes

Pour lire les dimensions actuelles de la fenêtre — utile pour adapter le contenu au redimensionnement :

📋 Copier le code

import tkinter as tk

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

def afficher_dimensions(event=None):
    l = fenetre.winfo_width()
    h = fenetre.winfo_height()
    label.config(text=f"Fenêtre : {l} × {h} px")

label = tk.Label(fenetre, font=("Arial", 12))
label.pack(expand=True)

# Se déclenche à chaque redimensionnement
fenetre.bind("", afficher_dimensions)
fenetre.after(100, afficher_dimensions)  # lecture initiale après rendu

fenetre.mainloop()

L'événement <Configure> se déclenche à chaque modification de taille ou de position de la fenêtre. winfo_width() et winfo_height() retournent les dimensions réelles après rendu — à appeler après update_idletasks() ou dans un callback lié à <Configure> pour être sûr d'avoir les bonnes valeurs.

Par carabde | Mis à jour le 30 avril 2025