Python: tracer des lignes colorées

Pour le projet Qasari, il faut apprendre beaucoup de chose en particulier comment gérer des graphiques. C'est à dire qu'un logiciel de CAO à la base c'est écrire des lignes qui relis des points pour former des figures. On va donc commençer par travailler cette idée assez simple: tracer des lignes colorées.

On demande pas de faire des choses complexes tel que gérer un "geometric kernel modeling" pour le moment:

On s'exerce en python, d'après les exercices du livre "Apprendre à programmer en python 3, Swinnen". Après vous pourrez adapter en C++ avec Dear ImGui

  • Gérer une bibliothèque graphique (tkinter)
  • Créer une fonction tracer_ligne
  • Trois boutons "tracer ligne" "changer couleur" "quitter"
#!/usr/bin/python
# -*- coding: utf-8 -*-

import tkinter as tk
import math

# Définir les couleurs disponibles
couleurs = ["red", "blue", "green", "yellow", "purple", "orange"]
index_couleur = 0

# Créer la fenêtre principale
root = tk.Tk()
root.title("Canevas avec lignes tournantes")
root.geometry("600x650")

# Créer le canevas
canevas = tk.Canvas(root, width=600, height=600, bg="white")
canevas.pack()

# Fonction pour tracer une ligne
angle = 0
longueur_ligne = 200

def tracer_ligne():
    global angle
    centre_x, centre_y = 300, 300
    angle_radians = math.radians(angle)
    x1 = centre_x - longueur_ligne/2 * math.cos(angle_radians)
    y1 = centre_y - longueur_ligne/2 * math.sin(angle_radians)
    x2 = centre_x + longueur_ligne/2 * math.cos(angle_radians)
    y2 = centre_y + longueur_ligne/2 * math.sin(angle_radians)

    canevas.create_line(x1, y1, x2, y2, fill=couleurs[index_couleur], width=2)
    angle += 15  # Incrémenter l'angle pour la prochaine ligne

# Fonction pour changer de couleur
def changer_couleur():
    global index_couleur
    index_couleur = (index_couleur + 1) % len(couleurs)

# Fonction pour quitter l'application
def quitter():
    root.destroy()

# Créer les boutons
frame_boutons = tk.Frame(root)
frame_boutons.pack(pady=10)

bouton_tracer = tk.Button(frame_boutons, text="Tracer ligne", command=tracer_ligne)
bouton_tracer.grid(row=0, column=0, padx=10)

bouton_changer_couleur = tk.Button(frame_boutons, text="Changer de couleur", command=changer_couleur)
bouton_changer_couleur.grid(row=0, column=1, padx=10)

bouton_quitter = tk.Button(frame_boutons, text="Quitter", command=quitter)
bouton_quitter.grid(row=0, column=2, padx=10)

# Lancer la boucle principale de l'application
root.mainloop()

Explications du script :

  • Couleurs disponibles : Une liste de six couleurs est définie (couleurs). L'index de la couleur courante est stocké dans index_couleur.
  • Création de la fenêtre principale : La fenêtre principale est créée avec une taille de 600x650 (50 pixels de plus en hauteur pour les boutons).
  • Création du canevas : Un canevas de 600x600 pixels avec un fond blanc est créé et ajouté à la fenêtre.
  • Fonction tracer_ligne :
    • Calcule les coordonnées de la ligne à partir du centre du canevas.
    • Trace une ligne avec la couleur courante.
    • Incrémente l'angle de 15 degrés pour la prochaine ligne.
  • Fonction changer_couleur : Change l'index de la couleur courante en passant à la couleur suivante de la liste.
  • Fonction quitter : Ferme l'application.
  • Boutons : Trois boutons sont créés et disposés dans un frame en dessous du canevas pour tracer une ligne, changer de couleur et quitter l'application.
  • Boucle principale : La boucle principale de Tkinter est lancée pour afficher la fenêtre et gérer les interactions utilisateur.