Python GUI Development

Maîtriser la commutation de frames sous Tkinter

Spread the love

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

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()

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 ou place 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *