Codificare la tua app di pittura è un esercizio classico che ti insegnerà molto sulla programmazione della GUI.
Un semplice strumento di disegno è una delle app più comuni che puoi trovare sulla maggior parte dei computer. Consente all'artista di commettere errori senza paura, di scegliere qualsiasi colore con un clic di un pulsante e di modificare istantaneamente la dimensione delle pennellate. Puoi usarlo per creare loghi di marchi, concettualizzare interfacce utente e annotare diagrammi.
Quindi, come puoi creare un'applicazione di pittura?
Il modulo Tkinter e Pillow
Per creare un'applicazione di verniciatura, avrai bisogno dei moduli Tkinter e Pillow. Tkinter è uno dei i migliori framework Python che puoi utilizzare per personalizzare la tua GUI. È il modulo GUI Python standard per la creazione di applicazioni desktop. Tkinter viene fornito con una varietà di widget come etichetta, voce, tela e pulsante.
Pillow, un fork della Python Imaging Library (PIL), è un modulo di elaborazione delle immagini per Python. Con Pillow puoi aprire, ridimensionare, capovolgere e ritagliare le immagini. Puoi
convertire formati di file, creare un'applicazione per la ricerca di ricette e recuperare immagini casuali.Per installare questi moduli, eseguire:
pip install tk pillow
Definire la struttura dell'applicazione di pittura
Puoi trovare l'intero codice sorgente per questo progetto in questo Repositorio GitHub.
Inizia importando i moduli richiesti. Definire una classe, DrawApp. Imposta il titolo, il colore del puntatore e il colore della gomma. Rendi l'applicazione aperta a schermo intero. Chiama il setup_widgets metodo.
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()
Definire un metodo chiamato setup_widgets. Definire un'etichetta che visualizzi un'intestazione. Imposta l'elemento principale, il testo che desideri visualizzare, lo stile del carattere, il colore dello sfondo e il colore del testo. Definire una cornice per la tavolozza dei colori. Imposta l'elemento genitore, il testo che dovrebbe visualizzare, gli stili dei caratteri e la larghezza del bordo. Imposta il bordo in modo che abbia l'aspetto di una cresta e il colore dello sfondo su bianco.
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)
Definire un set di colori per la tavolozza dei colori in un elenco. Itera su di esso e crea un pulsante per ciascuno di essi. Imposta l'elemento principale, il colore di sfondo, la larghezza del bordo e l'aspetto. Imposta anche la larghezza e il comando che ciascun pulsante deve eseguire quando viene cliccato. Organizza tutti gli elementi con l'imbottitura adeguata e i colori in gruppi di due.
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
Allo stesso modo, definisci un pulsante per la gomma, uno per pulire lo schermo e uno per salvare l'immagine.
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,
)
Definire un widget di scala per aumentare o diminuire la dimensione del puntatore o della gomma. Imposta l'elemento principale, l'orientamento, l'intervallo e la lunghezza in pixel. Definisci una tela e imposta l'elemento principale, il colore di sfondo e la larghezza del bordo. Inoltre, impostare lo scarico in modo che abbia l'aspetto di una scanalatura insieme alla sua altezza e larghezza.
Posiziona la tela con le coordinate appropriate e fissa l'ancora a nord-ovest (in alto a sinistra). Lega il B1-Movimento alla funzione di pittura. B1 si riferisce al pulsante sinistro del mouse tenuto premuto e Movimento si riferisce al movimento. Nel complesso, lo usi per tenere traccia del movimento del mouse mentre premi il pulsante sinistro.
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)
Definire le caratteristiche dell'applicazione Paint
Definire un metodo, colore. Per dipingere, l'app disegnerà continuamente piccoli ovali. Sottrai 2 da X E sì coordinate dell'evento del mouse per determinare l'angolo in alto a sinistra dell'ovale. Aggiungi 2 per determinare l'angolo in basso a destra dell'ovale. Crea un ovale utilizzando queste coordinate di delimitazione.
Imposta il colore di riempimento, il colore del contorno e la larghezza in base alla selezione del puntatore.
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(),
)
Definire tre funzioni, seleziona_colore, gomma per cancellare, E, schermo pulito. IL seleziona_colore prende un colore e imposta il puntatore di conseguenza. IL gomma per cancellare Il metodo imposta il puntatore in modo che abbia un effetto simile a una gomma e gli fa disegnare linee trasparenti. IL schermo pulito Il metodo elimina tutti gli elementi sull'area di disegno.
defselect_color(self, col):
self.pointer = coldeferaser(self):
self.pointer = self.erase
defclear_screen(self):
self.canvas.delete("all")
Definire un metodo, tela_colore. Apri un selettore di colori con tutti i diversi colori. Restituisce una tupla contenente il colore in RGB formato e formato esadecimale. Se l'utente sceglie un colore, utilizzare il file configurare metodo per impostare il colore di sfondo. Imposta il colore della gomma sullo stesso colore dello sfondo.
defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]
Definire un metodo, salva come. Apre una finestra di dialogo del file che chiede all'utente di scegliere il nome e il percorso del file. Se l'utente seleziona un percorso, utilizzare quello di Pillow ImageGrab classe per catturare l'intero schermo. Ritaglia l'immagine utilizzando le coordinate specificate per ottenere la regione della tela. Sperimenta con le coordinate per afferrare la parte desiderata.
Salva questo risultato nel percorso del file desiderato. Visualizza una finestra di messaggio che informa l'utente che il programma ha salvato con successo il disegno come immagine. In caso di qualsiasi errore, visualizza l'errore corrispondente.
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}")
Crea un'istanza di Grazie e il DrawApp classe. IL ciclo principale() La funzione dice a Python di eseguire il ciclo di eventi di Tkinter e di ascoltare gli eventi finché non chiudi la finestra.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
Testare diverse funzionalità di pittura utilizzando Python
Quando esegui il programma di disegno, vedrai un'app con una tavolozza di colori, quattro pulsanti, un cursore e una tela su cui dipingere:
Fare clic su qualsiasi colore per selezionarlo. Puoi quindi disegnare sulla tela in quel colore con il pulsante sinistro del mouse:
Facendo clic su Gomma per cancellare e trascinando il cursore verticalmente verso l'alto, selezionerai la gomma e ne aumenterai le dimensioni. Prova la gomma trascinandola sul disegno per cancellare i tratti.
Quando fai clic su Schermo pulito pulsante, il programma cancella il disegno precedente. Clicca il Sfondo pulsante per aprire una tavolozza di colori e utilizzarla per modificare il colore di sfondo.
Facendo clic su Salva disegno pulsante, si apre una finestra di dialogo file. Scegli un percorso e un nome per il file e il programma lo salverà.
Migliorare l'applicazione della vernice
Puoi migliorare la funzionalità dell'applicazione di pittura aggiungendo un'opzione per aggiungere forme. Puoi dare un'opzione per selezionare il tipo di pennello e l'opacità. Aggiungi un'opzione per aggiungere testo e adesivi. Aggiungi un'opzione per annullare, ripetere, ridimensionare e capovolgere le immagini. Ciò renderà il processo di disegno molto più fluido.
Per creare forme, puoi utilizzare metodi come create_rectangle, create_oval, create_line e create_polygon. Per aggiungere testo e immagini, utilizzare il metodo create_text e create_image. Per ridimensionare e capovolgere le immagini, puoi utilizzare i metodi di ridimensionamento e trasposizione di Pillow.