|
import tkinter as tk |
|
from tkinter import ttk, scrolledtext |
|
from PIL import Image, ImageTk |
|
import os |
|
from datetime import datetime |
|
import json |
|
import requests |
|
from io import BytesIO |
|
|
|
class DrawingTutorialApp: |
|
def __init__(self, root): |
|
self.root = root |
|
self.root.title("Générateur de Tutoriel de Dessin") |
|
|
|
|
|
self.setup_styles() |
|
|
|
|
|
self.current_step = 0 |
|
self.generated_images = [] |
|
self.steps_description = [] |
|
|
|
|
|
self.create_interface() |
|
|
|
def setup_styles(self): |
|
style = ttk.Style() |
|
style.configure('TButton', padding=5) |
|
style.configure('TFrame', padding=5) |
|
|
|
def create_interface(self): |
|
|
|
main_frame = ttk.Frame(self.root) |
|
main_frame.pack(expand=True, fill='both', padx=10, pady=10) |
|
|
|
|
|
desc_frame = ttk.LabelFrame(main_frame, text="Description du dessin") |
|
desc_frame.pack(fill='x', pady=5) |
|
|
|
self.description_text = scrolledtext.ScrolledText(desc_frame, height=4) |
|
self.description_text.pack(fill='x', padx=5, pady=5) |
|
|
|
|
|
control_frame = ttk.Frame(main_frame) |
|
control_frame.pack(fill='x', pady=5) |
|
|
|
ttk.Button(control_frame, text="Générer les étapes", |
|
command=self.generate_steps).pack(side='left', padx=5) |
|
|
|
ttk.Button(control_frame, text="Étape précédente", |
|
command=self.previous_step).pack(side='left', padx=5) |
|
|
|
ttk.Button(control_frame, text="Étape suivante", |
|
command=self.next_step).pack(side='left', padx=5) |
|
|
|
|
|
self.display_frame = ttk.LabelFrame(main_frame, text="Aperçu de l'étape") |
|
self.display_frame.pack(fill='both', expand=True, pady=5) |
|
|
|
self.image_label = ttk.Label(self.display_frame) |
|
self.image_label.pack(padx=5, pady=5) |
|
|
|
|
|
self.step_description = ttk.Label(self.display_frame, |
|
text="Aucune étape générée", |
|
wraplength=400) |
|
self.step_description.pack(padx=5, pady=5) |
|
|
|
def generate_steps(self): |
|
description = self.description_text.get("1.0", "end-1c") |
|
if not description: |
|
return |
|
|
|
|
|
base_steps = [ |
|
"Esquisse de base et formes géométriques", |
|
"Ajout des détails principaux", |
|
"Affinement des lignes", |
|
"Ajout des ombres de base", |
|
"Colorisation de base", |
|
"Ajout des détails de couleur", |
|
"Finalisation et mise en valeur" |
|
] |
|
|
|
|
|
|
|
self.generated_images = [] |
|
self.steps_description = [] |
|
|
|
for step in base_steps: |
|
|
|
|
|
blank_image = Image.new('RGB', (400, 400), 'white') |
|
self.generated_images.append(blank_image) |
|
self.steps_description.append(f"{step}\n{description}") |
|
|
|
self.current_step = 0 |
|
self.update_display() |
|
|
|
def update_display(self): |
|
if not self.generated_images: |
|
return |
|
|
|
image = self.generated_images[self.current_step] |
|
photo = ImageTk.PhotoImage(image) |
|
self.image_label.configure(image=photo) |
|
self.image_label.image = photo |
|
|
|
step_text = f"Étape {self.current_step + 1}/{len(self.generated_images)}\n" |
|
step_text += self.steps_description[self.current_step] |
|
self.step_description.configure(text=step_text) |
|
|
|
def previous_step(self): |
|
if self.current_step > 0: |
|
self.current_step -= 1 |
|
self.update_display() |
|
|
|
def next_step(self): |
|
if self.current_step < len(self.generated_images) - 1: |
|
self.current_step += 1 |
|
self.update_display() |
|
|
|
def main(): |
|
root = tk.Tk() |
|
app = DrawingTutorialApp(root) |
|
root.mainloop() |
|
|
|
if __name__ == "__main__": |
|
main() |