Coder votre propre application de peinture est un exercice classique qui vous en apprendra beaucoup sur la programmation GUI.
Un simple outil de peinture est l’une des applications les plus courantes que vous pouvez trouver sur la plupart des ordinateurs. Il permet à l'artiste de faire des erreurs sans crainte, de choisir n'importe quelle couleur en un seul clic et de modifier instantanément la taille de ses coups de pinceau. Vous pouvez l'utiliser pour créer des logos de marque, conceptualiser des interfaces utilisateur et annoter des diagrammes.
Alors, comment créer une application de peinture ?
Le module Tkinter et Pillow
Pour créer une application de peinture, vous aurez besoin des modules Tkinter et Pillow. Tkinter est l'un des meilleurs frameworks Python que vous pouvez utiliser pour personnaliser votre interface graphique. Il s'agit du module GUI Python standard pour créer des applications de bureau. Tkinter est livré avec une variété de widgets tels que l'étiquette, l'entrée, le canevas et le bouton.
Pillow, un fork de Python Imaging Library (PIL), est un module de traitement d'image pour Python. Avec Pillow, vous pouvez ouvrir, redimensionner, retourner et recadrer des images. Tu peux convertir les formats de fichiers, créez une application de recherche de recettes, et récupérer des images aléatoires.
Pour installer ces modules, exécutez :
pip install tk pillow
Définir la structure de l'application de peinture
Vous pouvez trouver l'intégralité du code source de ce projet dans ce Dépôt GitHub.
Commencez par importer les modules requis. Définir une classe, DrawApp. Définissez le titre, la couleur du pointeur et la couleur de la gomme. Ouvrez l'application en plein écran. Appeler le configuration_widgets méthode.
import tkinter as tk
from tkinter.ttk import Scale
from tkinter import colorchooser, filedialog, messagebox
import PIL.ImageGrab as ImageGrab
classDrawApp:
def__init__(self, root):
self.root = root
self.root.title("Kids' Paint App")
self.root.attributes("-fullscreen", True)
self.pointer = "black"
self.erase = "white"
self.setup_widgets()
Définir une méthode appelée configuration_widgets. Définissez une étiquette qui affiche un en-tête. Définissez l'élément parent, le texte que vous souhaitez afficher, le style de police, la couleur d'arrière-plan et la couleur du texte. Définissez un cadre pour la palette de couleurs. Définissez l'élément parent, le texte qu'il doit afficher, les styles de police et la largeur de la bordure. Définissez la bordure pour qu'elle ait une apparence en forme de crête et la couleur d'arrière-plan sur blanc.
defsetup_widgets(self):
self.title_label = tk.Label(
self.root,
text="Kids' Paint App",
font=("Comic Sans MS", 30),
bg="lightblue",
fg="purple",
)
self.title_label.pack(fill=tk.X, pady=10)
self.color_frame = tk.LabelFrame(
self.root,
text="Colors",
font=("Comic Sans MS", 15),
bd=5,
relief=tk.RIDGE,
bg="white",
)
self.color_frame.place(x=10, y=80, width=90, height=180)
Définissez un ensemble de couleurs pour la palette de couleurs dans une liste. Parcourez-le et créez un bouton pour chacun d’eux. Définissez l'élément parent, la couleur d'arrière-plan, la largeur de la bordure et l'apparence. Définissez également la largeur et la commande que chaque bouton doit exécuter lorsque vous cliquez dessus. Organisez tous les éléments avec un rembourrage approprié et les couleurs par lots de deux.
colors = [
"blue",
"red",
"green",
"orange",
"violet",
"black",
"yellow",
"purple",
"pink",
"gold",
"brown",
"indigo",
]
i, j = 0, 0
for color in colors:
tk.Button(
self.color_frame,
bg=color,
bd=2,
relief=tk.RIDGE,
width=3,
command=lambda col=color: self.select_color(col),
).grid(row=i, column=j, padx=2, pady=2)
i += 1
if i == 4:
i = 0
j = 1
De même, définissez un bouton pour la gomme, un pour effacer l'écran et un pour enregistrer l'image.
self.eraser_btn = tk.Button(
self.root,
text="Eraser",
bd=4,
bg="white",
command=self.eraser,
width=9,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.eraser_btn.place(x=10, y=310)
self.clear_screen_btn = tk.Button(
self.root,
text="Clear Screen",
bd=4,
bg="white",
command=self.clear_screen,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.clear_screen_btn.place(x=10, y=370)
self.save_as_btn = tk.Button(
self.root,
text="Save Drawing",
bd=4,
bg="white",
command=self.save_as,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.save_as_btn.place(x=10, y=430)
self.bg_btn = tk.Button(
self.root,
text="Background",
bd=4,
bg="white",
command=self.canvas_color,
width=12,
relief=tk.RIDGE,
font=("Comic Sans MS", 12),
)
self.bg_btn.place(x=10, y=490)
self.pointer_frame = tk.LabelFrame(
self.root,
text="Size",
bd=5,
bg="white",
font=("Comic Sans MS", 15, "bold"),
relief=tk.RIDGE,
)
Définissez un widget d'échelle pour augmenter ou diminuer la taille du pointeur ou de la gomme. Définissez l'élément parent, l'orientation, la plage et la longueur en pixels. Définissez un canevas et définissez l'élément parent, la couleur d'arrière-plan et la largeur de la bordure. Définissez également le relief pour qu'il ait une apparence de rainure ainsi que sa hauteur et sa largeur.
Positionnez la toile avec les coordonnées appropriées et placez l'ancre au nord-ouest (en haut à gauche). Lier le B1-Mouvement à la fonction peinture. B1 fait référence au bouton gauche de la souris maintenu enfoncé et Mouvement fait référence au mouvement. Dans l'ensemble, vous l'utilisez pour suivre les mouvements de la souris pendant que vous appuyez sur le bouton gauche.
self.pointer_frame.place(x=10, y=580, height=150, width=70)
self.pointer_size = Scale(
self.pointer_frame, orient=tk.VERTICAL, from_=48, to=1, length=120
)
self.pointer_size.set(1)
self.pointer_size.grid(row=0, column=1, padx=15)
self.canvas = tk.Canvas(
self.root, bg="white", bd=5, relief=tk.GROOVE, height=650, width=1300
)
self.canvas.place(x=160, y=120, anchor="nw")
self.canvas.bind("" , self.paint)
Définir les fonctionnalités de l'application de peinture
Définir une méthode, peinture. Pour peindre, l'application dessinera en continu de minuscules ovales. Soustrayez 2 du X et oui coordonnées de l'événement de souris pour déterminer le coin supérieur gauche de l'ovale. Ajoutez 2 pour déterminer le coin inférieur droit de l’ovale. Créez un ovale en utilisant ces coordonnées limites.
Définissez la couleur de remplissage, la couleur du contour et la largeur selon la sélection du pointeur.
defpaint(self, event):
x1, y1 = (event.x - 2), (event.y - 2)
x2, y2 = (event.x + 2), (event.y + 2)
self.canvas.create_oval(
x1,
y1,
x2,
y2,
fill=self.pointer,
outline=self.pointer,
width=self.pointer_size.get(),
)
Définir trois fonctions, Choisissez la couleur, gomme, et, écran propre. Le Choisissez la couleur La méthode prend une couleur et définit le pointeur en conséquence. Le gomme La méthode définit le pointeur pour qu'il ait un effet semblable à une gomme et lui fait dessiner des lignes transparentes. Le écran propre La méthode supprime tous les éléments du canevas.
defselect_color(self, col):
self.pointer = coldeferaser(self):
self.pointer = self.erase
defclear_screen(self):
self.canvas.delete("all")
Définir une méthode, couleur de la toile. Ouvrez un sélecteur de couleurs avec toutes les différentes couleurs. Renvoie un tuple contenant la couleur dans RVB format et format hexadécimal. Si l'utilisateur choisit une couleur, utilisez le configurer méthode pour définir la couleur d’arrière-plan. Définissez la couleur de la gomme sur la même couleur que la couleur d’arrière-plan.
defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]
Définir une méthode, enregistrer sous. Ouvrez une boîte de dialogue de fichier demandant à l'utilisateur de choisir le nom et le chemin du fichier. Si l'utilisateur sélectionne un chemin, utilisez Pillow ImageGrab classe pour capturer tout l’écran. Recadrez l'image en utilisant les coordonnées spécifiées pour obtenir la région du canevas. Expérimentez avec les coordonnées pour saisir la pièce souhaitée.
Enregistrez ce résultat dans le chemin de fichier souhaité. Affichez une boîte de message qui informe l'utilisateur que le programme a réussi à enregistrer la peinture en tant qu'image. En cas d'erreur, il affiche l'erreur correspondante.
defsave_as(self):
file_path = filedialog.asksaveasfilename(
defaultextension=".jpg", filetypes=[("Image files", "*.jpg")]
)
if file_path:
try:
y = 148
x = 200
y1 = 978
x1 = 1840
ImageGrab.grab().crop((x, y, x1, y1)).save(file_path)
messagebox.showinfo("Save Drawing", "Image file saved successfully!")
except Exception as e:
messagebox.showerror("Error", f"Failed to save the image file: {e}")
Créez une instance du Merci et le DrawApp classe. Le boucle principale() La fonction indique à Python d'exécuter la boucle d'événements Tkinter et d'écouter les événements jusqu'à ce que vous fermiez la fenêtre.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
Test de différentes fonctionnalités de peinture à l'aide de Python
Lorsque vous exécutez le programme de peinture, vous verrez une application avec une palette de couleurs, quatre boutons, un curseur et une toile sur laquelle peindre :
Cliquez sur n’importe quelle couleur pour la sélectionner. Vous pouvez ensuite dessiner sur la toile dans cette couleur avec le bouton gauche de la souris :
En cliquant sur le Gomme et en faisant glisser le curseur verticalement vers le haut, vous sélectionnerez la gomme et augmenterez sa taille. Testez la gomme en la faisant glisser sur votre dessin pour effacer les traits.
Lorsque vous cliquez sur le Écran propre bouton, le programme efface votre dessin précédent. Clique le Arrière-plan pour ouvrir une palette de couleurs et l'utiliser pour changer la couleur d'arrière-plan.
En cliquant sur le Enregistrer le dessin bouton, une boîte de dialogue de fichier s'ouvre. Choisissez un chemin et un nom pour le fichier et le programme l'enregistrera.
Améliorer l'application de la peinture
Vous pouvez améliorer les fonctionnalités de l'application de peinture en ajoutant une option permettant d'ajouter des formes. Vous pouvez donner la possibilité de sélectionner le type de pinceau et l'opacité. Ajoutez une option pour ajouter du texte et des autocollants. Ajoutez une option pour annuler, refaire, redimensionner et retourner les images. Cela rendra le processus de dessin beaucoup plus fluide.
Pour créer des formes, vous pouvez utiliser des méthodes telles que create_rectangle, create_oval, create_line et create_polygon. Pour ajouter du texte et des images, utilisez les méthodes create_text et create_image. Pour redimensionner et retourner des images, vous pouvez utiliser les méthodes de redimensionnement et de transposition de Pillow.