La bibliothèque Tkinter de Python n’offre pas de mécanisme direct de « changement d’image » comme les frameworks web. Au lieu de cela, vous gérez la visibilité de plusieurs frames au sein d’une seule fenêtre principale pour créer l’illusion de passer d’un écran ou d’une section à un autre. Ce tutoriel montre comment construire une interface utilisateur dynamique et organisée avec cette technique.
Table des matières
- Création des frames et d’un conteneur
- Changer de frame avec une fonction
- Exemple : Une application de navigation simple
- Améliorer votre interface utilisateur
Création des frames et d’un conteneur
L’idée principale est de créer plusieurs frames, chacune représentant une « page » ou une section différente de votre application. Elles sont toutes placées dans une seule frame conteneur, qui sert de zone d’affichage principale. Une seule frame est visible à la fois.
import tkinter as tk
root = tk.Tk()
root.title("Exemple de changement de frame")
# Frame conteneur
container = tk.Frame(root)
container.pack(side="top", fill="both", expand=True)
# Création des frames
frame1 = tk.Frame(container)
frame2 = tk.Frame(container)
# Placement des frames (frame2 initialement cachée)
frame1.pack(fill="both", expand=True)
frame2.pack(fill="both", expand=True)
frame2.pack_forget()
# Ajout de widgets aux frames
label1 = tk.Label(frame1, text="Ceci est la Frame 1")
label1.pack(pady=20)
label2 = tk.Label(frame2, text="Ceci est la Frame 2")
label2.pack(pady=20)
Changer de frame avec une fonction
Une fonction gère la visibilité des frames. Elle masque la frame actuellement visible, puis affiche la frame sélectionnée.
def show_frame(frame):
for f in (frame1, frame2): # Étendre cette liste pour plus de frames
if f == frame:
f.pack(fill="both", expand=True)
else:
f.pack_forget()
Exemple : Une application de navigation simple
Voici un exemple complet avec deux boutons de navigation :
import tkinter as tk
root = tk.Tk()
root.title("Exemple de changement de frame")
container = tk.Frame(root)
container.pack(side="top", fill="both", expand=True)
frame1 = tk.Frame(container)
frame2 = tk.Frame(container)
frame1.pack(fill="both", expand=True)
frame2.pack(fill="both", expand=True)
frame2.pack_forget()
label1 = tk.Label(frame1, text="Ceci est la Frame 1")
label1.pack(pady=20)
label2 = tk.Label(frame2, text="Ceci est la Frame 2")
label2.pack(pady=20)
def show_frame(frame):
for f in (frame1, frame2):
if f == frame:
f.pack(fill="both", expand=True)
else:
f.pack_forget()
button1 = tk.Button(root, text="Aller à la Frame 1", command=lambda: show_frame(frame1))
button1.pack()
button2 = tk.Button(root, text="Aller à la Frame 2", command=lambda: show_frame(frame2))
button2.pack()
root.mainloop()
Améliorer votre interface utilisateur
Ceci est un cadre de base. Envisagez ces améliorations :
- Plus de frames : Ajoutez plus de frames et mettez à jour la fonction
show_frame
en conséquence. - Gestionnaires de disposition : Explorez
grid
ouplace
pour des dispositions plus complexes. - Style : Utilisez des thèmes, des couleurs et des widgets personnalisés pour améliorer l’attrait visuel.
- Liaison de données : Utilisez des variables pour mettre à jour dynamiquement le contenu des frames.
- Gestion des erreurs : Mettez en œuvre une gestion robuste des erreurs pour une application plus stable.
Cette méthode offre un moyen propre de gérer plusieurs vues dans votre application Tkinter, simulant efficacement le changement de frame.