0 / 0
🐍 Interface graphique Python

Tkinter —
Restaurant Menu

Créer une interface graphique avec Tkinter : fenêtre principale, widgets, grille, cases de saisie, boutons et fenêtre popup ticket.

7
Catégories menu
5€
Prix par article
tk
Module Tkinter
🧾
Ticket popup

Aperçu de l'interface

Restaurant — Choix des prix
✅ Script prêt ! Télécharge restaurant_tkinter.py et lance-le avec python restaurant_tkinter.py. Aucune librairie externe requise — Tkinter est inclus dans Python.
Choix des prix — Restaurant
Salade
Libanaise
Caesar
Avocat et crevettes
Burger
Cheeseburger
McChicken
Big Mac
Boisson
Coca
Sprite
Espresso
Pasta
Alfredo
Carbonara
Bolognaise
Ravioli
Escalope
Escalope de dinde
Escalope panée
Escalope milanaise
Pizza
Margherita
Pepperoni
4 fromages
Dessert
Tiramisu
Dame blanche
Cheesecake
Pourcentage de modif : % Valider Pourcentage Quitter
🚀
Comment lancer le script
Prérequis et exécution
# Tkinter est inclus dans Python — pas besoin de pip
python --version # Vérifier Python installé
python restaurant_tkinter.py
# Ou double-clic sur le fichier .py # Importer Tkinter dans le script :
import tkinter as tk
from tkinter import messagebox
from datetime import datetime
🧾
Ce que fait le script
Fonctionnalités
  • Affiche un menu restaurant avec 7 catégories
  • Saisie de quantité pour chaque article (5€/unité)
  • Valider → popup avec ticket récapitulatif + total
  • Pourcentage → applique une remise ou hausse %
  • Quitter → ferme l'application
  • Gestion d'erreur si commande vide

Bases de Tkinter

Structure minimale
🪟
Fenêtre principale
tk.Tk() + mainloop()
# ── Structure minimale d'une app Tkinter ──
import tkinter as tk
fenetre = tk.Tk()
fenetre.title("Mon Application")
fenetre.geometry("800x600")
fenetre.configure(bg="#f5f5f0")
fenetre.resizable(False, False)
# ── Boucle principale (obligatoire à la fin) ──
fenetre.mainloop()
🏛️
Structure orientée objet (classe)
Méthode recommandée pour les gros projets
# ── App sous forme de classe (comme dans notre script) ──
class MonApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("Mon App")
self._build_ui()
def _build_ui(self):
tk.Label(self, text="Bonjour !").pack()
# ── Lancement ──
if __name__ == "__main__":
app = MonApp()
app.mainloop()
📐
Les 3 gestionnaires de mise en page
pack / grid / place
MéthodeUsageExemple
.pack()Simple, empile les widgets.pack(fill="x", pady=4)
.grid()Grille lignes/colonnes.grid(row=0, col=1)
.place()Position absolue x,y.place(x=100, y=50)
# pack — disposition verticale/horizontale
tk.Label(root, text="Titre").pack(fill="x")
tk.Button(root, text="OK").pack(side="left")
# grid — colonnes et lignes
tk.Label(root, text="Nom").grid(row=0, column=0)
tk.Entry(root).grid(row=0, column=1)
🪟
Fenêtre popup (Toplevel)
tk.Toplevel — ticket de caisse
# ── Ouvrir une nouvelle fenêtre popup ──
def ouvrir_ticket():
popup = tk.Toplevel(self)
popup.title("🧾 Ticket de caisse")
popup.configure(bg="#f5f5f0")
# Ajouter des widgets dans le popup
tk.Label(popup, text="TOTAL : 15 €",
font=("Segoe UI", 14, "bold")).pack(pady=20)
tk.Button(popup, text="Fermer",
command=popup.destroy).pack()
# ── messagebox — boîte de dialogue simple ──
from tkinter import messagebox
messagebox.showwarning("Titre", "Message !")
messagebox.showerror("Erreur", "Erreur !")
messagebox.showinfo("Info", "Info !")

Widgets Tkinter

Label · Entry · Button · Frame
🏷️
Label — Texte affiché
# ── Label : afficher du texte ──
lbl = tk.Label(parent,
text="Libanaise",
font=("Segoe UI", 10),
bg="#ffffff",
fg="#3c3c3c",
width=22,
anchor="w")
lbl.pack(side="left")
✏️
Entry — Champ de saisie
# ── Entry : zone de texte modifiable ──
var = tk.IntVar(value=0) # Variable liée
entry = tk.Entry(parent,
textvariable=var,
width=4,
font=("Segoe UI", 9),
justify="center",
relief="solid", bd=1)
entry.pack(side="left", padx=4)
# Lire la valeur :
qty = var.get() # Renvoie l'entier
🔘
Button — Bouton cliquable
# ── Button : déclencheur d'action ──
tk.Button(parent,
text="Valider",
font=("Segoe UI", 10, "bold"),
bg="#5a9a4a",
fg="white",
relief="flat",
padx=18, pady=6,
cursor="hand2",
command=self._valider
).pack(side="left", padx=6)
🗂️
Frame — Conteneur
# ── Frame : boîte pour grouper des widgets ──
frame = tk.Frame(parent,
bg="#ffffff",
bd=1,
relief="solid",
padx=10, pady=8)
frame.pack(fill="x", pady=6)
# Mettre des widgets DANS la frame :
tk.Label(frame, text="Salade").pack()
# grid() pour plusieurs colonnes :
frame.grid(row=0, column=0, sticky="n", padx=10)
🔢
Variables Tkinter
IntVar, StringVar, DoubleVar
# ── Variables dynamiques liées aux widgets ──
qty = tk.IntVar(value=0) # Entier
nom = tk.StringVar(value="") # Texte
pct = tk.DoubleVar(value=0.0) # Décimal
# Lier à un widget :
tk.Entry(root, textvariable=qty)
# Lire la valeur :
valeur = qty.get() # → 0, 1, 2...
# Modifier la valeur :
qty.set(5) # → met 5 dans l'Entry
🎨
Apparence — couleurs & polices
# ── Paramètres d'apparence communs ──
bg="#5a9a4a" # Couleur fond
fg="white" # Couleur texte
font=("Segoe UI", 11, "bold")
relief="flat" # flat/solid/raised/sunken
padx=10 # Espace horizontal interne
pady=6 # Espace vertical interne
anchor="w" # Alignement (w=gauche, e=droite)
width=20 # Largeur en caractères
cursor="hand2" # Curseur main sur bouton

Explication du script

restaurant_tkinter.py
💡 Structure du script : Le script utilise une classe qui hérite de tk.Tk. Chaque partie de l'interface est construite dans une méthode séparée pour garder le code lisible.
1. Données du menu
# ── Dictionnaire avec toutes les catégories et articles ──
MENU = {
"Salade" : ["Libanaise", "Caesar", "Avocat et crevettes"],
"Pasta" : ["Alfredo", "Carbonara", "Bolognaise", "Ravioli"],
"Pizza" : ["Margherita", "Pepperoni", "4 fromages"],
"Burger" : ["Cheeseburger", "McChicken", "Big Mac"],
"Escalope": ["Escalope de dinde", "Escalope panée"],
"Dessert" : ["Tiramisu", "Cheesecake", "Glace"],
"Boisson" : ["Coca", "Espresso", "Café"],
}
PRIX_UNITAIRE = 5.0 # € par article
2. Boucle pour créer les articles dynamiquement
# ── Pour chaque article : Label + Entry lié à un IntVar ──
self.qty_vars = {} # Stocker toutes les variables
for item in MENU[category]:
row = tk.Frame(frame, bg="white")
row.pack(fill="x")
key = f"{category}/{item}" # clé unique
var = tk.IntVar(value=0)
self.qty_vars[key] = var # Mémoriser
tk.Label(row, text=item, width=22).pack(side="left")
tk.Entry(row, textvariable=var, width=4).pack(side="left")
3. Bouton Valider → calcul → ticket popup
# ── Lire les quantités et calculer le total ──
def _valider(self):
commande = []
for key, var in self.qty_vars.items():
qty = var.get()
if qty > 0:
cat, item = key.split("/", 1)
prix = qty * PRIX_UNITAIRE # 5€ × quantité
commande.append((cat, item, qty, prix))
if not commande:
messagebox.showwarning("Vide", "Sélectionnez un article !")
return
self._afficher_ticket(commande)
# ── Ouvrir le ticket dans une Toplevel ──
win = tk.Toplevel(self)
total = sum(p for _,_,_,p in commande)
tk.Label(win, text=f"TOTAL : {total:.2f} €").pack()

Quiz Tkinter

12 questions
Score actuel
0 / 0

Flashcards Tkinter

Clique pour retourner
Carte 1 / 10
❓ Question
✅ Réponse

Checklist — Script restaurant

Étapes du projet
0%
Progression