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" :
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 :
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 :
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 :
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