| Édition du: 31/07/2025 | 
Faites
un double-clic pour un retour en haut de
page

| PROGRAMMATION PYTHON – DESSINS avec Tkinter Page de familiarisation avec
  le logiciel de dessin Tkinter (Tool kit interface), la bibliothèque graphique
  permettant la création de graphiques. Ce logiciel est inclus de
  base avec Python. Ce logiciel utilise le terme
  widget pour nommer les éléments
  constitutifs d'un dessin: boutons, jauges, menu déroulants, etc. Avec ou sans ces widgets, il
  est possible de créer les formes habituelles comme les segments, les
  rectangles, les cercles, etc.   | ||
| 
 | Sommaire de cette page  >>>
  Widgets   >>>
  Taille  >>>
  Mes premiers dessins  >>>
  Classiques fils tendus >>>
  Polygones centrés à la demande >>>
  Simulation de percolation de bulles      | Débutants Glossaire | 
Voir absolument  Mon espace de travail en
Python
| Liste des principaux widgets 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Exemples 
 | |
Référence List of Tkinker
Widgets – With examples – CodersLegacy (avec exemples de codes)
Voir Application
au dessin du polygone / Application à la percolation de
bulles
 
| Mes premiers
  pas | |||
| Maitrise de la fenêtre de travail Obligatoire sinon rien ne s'affiche | import tkinter as tk fenetre = tk.Tk()  # Crée une fenêtre principale fenetre.title("Ma première fenêtre Tkinter") label = tk.Label(fenetre, text="Hello, Tkinter", fg="white", bg="black", width=10, height=10) label.pack()       # Affiche le Label dans la fenêtre fenetre.mainloop() # Lance la boucle
  principale     | ||
| Explications | 
 
 
 | 
 | |
Note: Tous les
codes (programmes) sont directement copiables dans Python
 
| import tkinter as tk root = tk.Tk() root.geometry("800x600")  # Taille de la fenêtre root.maxsize(800, 600)    # Taille maximale canvas = tk.Canvas(root, width=800, height=600, bg="white") canvas.pack() root.mainloop() | |
| from tkinter import * fen = Tk() canvas = Canvas(fen, width=300, height=200, bg="white") canvas.pack() canvas.create_rectangle(10, 10, 150, 100, fill="skyblue") canvas.create_oval(100, 50, 240, 130, fill="orange") canvas.create_line(100, 100, 200, 200, fill="red", width=2) canvas.create_text(150, 180, text="Hello Nathan !", font=("Arial", 14)) fen.mainloop() 
 from tkinter import * root = Tk() C = Canvas(root, bg="yellow", height=250, width=300) line = C.create_line(108, 120, 320, 40,fill="green") arc = C.create_arc(180, 150, 80,210, start=0, extent=220, fill="red") oval = C.create_oval(80, 30, 140,150, fill="blue") C.pack() mainloop() 
 | |
| from tkinter import * fen = Tk() canvas = Canvas(fen, width=400, height=400, bg="white") canvas.pack() # Nombre de fils n = 40 # Dessin des fils tendus
  dans un carré for i in range(n + 1):     x = i * 400 / n     canvas.create_line(0, x, x, 400, fill="blue")     canvas.create_line(x, 0, 400, x, fill="blue") fen.mainloop() 
 from tkinter import * import math fen = Tk() canvas = Canvas(fen, width=400, height=400, bg="white") canvas.pack() # Centre et rayon cx, cy, r = 200, 200, 180 points = 150 # Calcul des points sur le
  cercle coords = [] for i in range(points):     angle = 2 * math.pi * i / points     x = cx + r * math.cos(angle)     y = cy + r * math.sin(angle)     coords.append((x, y)) # Relier les points avec
  des fils tendus for i in range(points):     canvas.create_line(coords[i], coords[(i * 2) % points], fill="purple") fen.mainloop() 
 | |
| import tkinter as tk import math # Fonction pour dessiner un polygone centré def dessiner_polygone():     if effacer_var.get():        
  canvas.delete("all")  # Efface les
  anciens dessins     k = int(cote_scale.get())    
  epaisseur = int(epaisseur_scale.get())    
  couleur_trait =
  couleur_trait_var.get()    
  couleur_remplissage =
  couleur_remplissage_var.get() if
  remplissage_var.get() else ""          w = canvas.winfo_width()     h = canvas.winfo_height()     rayon = min(w, h) // 2 - 20     cx, cy = w // 2, h // 2     points = []     for i in range(k):        
  angle = 2 * math.pi * i / k         x = cx + rayon * math.cos(angle)         y = cy + rayon * math.sin(angle)        
  points.append((x, y))     canvas.create_polygon(points, outline=couleur_trait,                           fill=couleur_remplissage,                           width=epaisseur) # Interface graphique fen = tk.Tk() fen.title("Polygone régulier interactif") # Canvas canvas = tk.Canvas(fen, width=400, height=400, bg="white") canvas.grid(row=0, column=0, columnspan=4, padx=10, pady=10) # Curseur pour k côtés tk.Label(fen, text="Nombre de côtés").grid(row=1, column=0) cote_scale = tk.Scale(fen, from_=3, to=20, orient="horizontal") cote_scale.set(5) cote_scale.grid(row=1, column=1) # Curseur épaisseur tk.Label(fen, text="Épaisseur").grid(row=2, column=0) epaisseur_scale = tk.Scale(fen, from_=1, to=10, orient="horizontal") epaisseur_scale.set(3) epaisseur_scale.grid(row=2, column=1) # Liste couleur trait tk.Label(fen, text="Couleur du trait").grid(row=1, column=2) couleur_trait_var = tk.StringVar() couleur_trait_menu = tk.OptionMenu(fen,
  couleur_trait_var, "black", "red", "blue", "green", "orange") couleur_trait_var.set("black") couleur_trait_menu.grid(row=1, column=3) # Liste couleur remplissage tk.Label(fen, text="Couleur de remplissage").grid(row=2, column=2) couleur_remplissage_var = tk.StringVar() couleur_remplissage_menu = tk.OptionMenu(fen,
  couleur_remplissage_var, "white", "red", "blue", "green", "yellow") couleur_remplissage_var.set("white") couleur_remplissage_menu.grid(row=2, column=3) # Cases à cocher remplissage_var = tk.BooleanVar() effacer_var = tk.BooleanVar() tk.Checkbutton(fen, text="Remplir le polygone", variable=remplissage_var).grid(row=3, column=0, columnspan=2) tk.Checkbutton(fen, text="Effacer avant tracé", variable=effacer_var).grid(row=3, column=2, columnspan=2) # Bouton tracer tk.Button(fen, text="Tracer le polygone", command=dessiner_polygone).grid(row=4, column=0, columnspan=4, pady=10) fen.mainloop() 
 | |
| import tkinter as tk import random import math class BubbleSimulator:     def __init__(self, master):         self.master = master         self.master.title("Simulation de percolation de bulles")         self.width = 600         self.height = 600         self.line_thickness = 10         # Canvas et
  ligne bleue         self.canvas = tk.Canvas(master, width=self.width, height=self.height, bg="white")         self.canvas.pack(fill="both", expand=True)         self.canvas.create_rectangle(             0,            
  self.height - self.line_thickness,            
  self.width,            
  self.height,             fill="blue", outline=""         )         # Panneau de
  contrôle         ctrl
  = tk.Frame(master)         ctrl.pack(fill="x", pady=5)         # Taille de
  la bulle         tk.Label(ctrl, text="Taille
  de la bulle").pack(side="left", padx=5)         self.size_scale = tk.Scale(ctrl, from_=2, to=30, orient="horizontal")         self.size_scale.set(7)         self.size_scale.pack(side="left")         # Vitesse de
  la descente         tk.Label(ctrl, text="Vitesse").pack(side="left", padx=5)         self.speed_scale = tk.Scale(ctrl, from_=100, to=500, orient="horizontal")         self.speed_scale.set(300)         self.speed_scale.pack(side="left")         # Afficher la
  descente ou non         self.show_descent = tk.BooleanVar(value=True)         tk.Checkbutton(            
  ctrl,            
  text="Afficher
  descente",            
  variable=self.show_descent         ).pack(side="left", padx=10)         # Choix de la
  couleur         tk.Label(ctrl, text="Couleur:").pack(side="left", padx=5)         self.color_choice = tk.StringVar(value="Bleu")        
  options = ["Noir", "Bleu", "Rouge", "Vert", "Aléatoire"]         tk.OptionMenu(ctrl, self.color_choice, *options).pack(side="left")         # Bulles
  fixées         self.fixed_bubbles = []         self.current = None         # Lancement         self.new_bubble()     def new_bubble(self):         r = self.size_scale.get()         x = random.randint(r, self.width - r)         # Si elle
  intersecte d'emblée une bulle figée → fin         for fx, fy, fr in self.fixed_bubbles:             if math.hypot(x - fx, r - fy) < (r + fr):                
  self.master.quit()                
  return         # Calcul de
  la position finale sans affichage pas-à-pas        
  final_y = self.find_final_y(x, r)         #
  Détermination de la couleur selon le choix        
  choice = self.color_choice.get()         if choice == "Aléatoire":            
  color = random.choice(["black", "blue", "red", "green"])         else:            
  mapping = {"Noir": "black", "Bleu": "blue", "Rouge": "red", "Vert": "green"}            
  color = mapping[choice]         # Pas
  d'animation : placement direct         if not self.show_descent.get():            
  oid = self.canvas.create_oval(                
  x - r, final_y - r,                
  x + r, final_y + r,                
  fill=color, outline=""             )            
  self.fixed_bubbles.append((x, final_y, r))            
  self.master.after(200, self.new_bubble)             return         # Affichage
  des 10 derniers pas seulement         start_y
  = max(r, final_y - 10)         oid = self.canvas.create_oval(            
  x - r, start_y - r,            
  x + r, start_y + r,            
  fill=color, outline=""         )         self.current = {             "id": oid,             "x": x,             "y": start_y,             "r": r,             "final_y": final_y,             "color": color         }         self.animate()     def find_final_y(self, x, r):         y = r         while True:            
  new_y = y + 1             # collision avec
  la ligne bleue             if new_y + r >= self.height - self.line_thickness:                
  return y             # collision
  avec bulles figées             for fx, fy, fr in self.fixed_bubbles:                
  if math.hypot(x - fx, new_y - fy) < (r + fr):                    
  return y            
  y = new_y     def animate(self):         b = self.current         if not b:             return        
  delay = max(2, int(50 / self.speed_scale.get()))         if b["y"] < b["final_y"]:             # déplacement
  d'1 px            
  self.canvas.move(b["id"], 0, 1)            
  b["y"] += 1            
  self.master.after(delay, self.animate)         else:            
  self.stop_bubble()     def stop_bubble(self):         b = self.current         x, r = b["x"], b["r"]        
  final_y = b["final_y"]         #
  repositionnement exact         self.canvas.coords(            
  b["id"],            
  x - r, final_y - r,            
  x + r, final_y + r         )         # figer la
  bulle         self.fixed_bubbles.append((x, final_y, r))         self.current = None         self.master.after(20, self.new_bubble) if __name__ == "__main__":     root = tk.Tk()     app = BubbleSimulator(root)     root.mainloop() 
 | |
Voir Cette même simulation avec Scratch
 
Voir Dessin de la fractale de
Mandelbrot avec Tkinter
 

| Retour | 
 | 
| Suite | 
 
 
 | 
| Voir | 
 
 
 | 
| Sites | 
 
 
 | 
| Cette page | 
