Η κωδικοποίηση της δικής σας εφαρμογής ζωγραφικής είναι μια κλασική άσκηση που θα σας διδάξει πολλά για τον προγραμματισμό GUI.

Ένα απλό εργαλείο ζωγραφικής είναι μια από τις πιο κοινές εφαρμογές που μπορείτε να βρείτε στους περισσότερους υπολογιστές. Επιτρέπει στον καλλιτέχνη να κάνει λάθη χωρίς φόβο, να επιλέξει οποιοδήποτε χρώμα με το πάτημα ενός κουμπιού και να αλλάξει το μέγεθος των πινελιών του αμέσως. Μπορείτε να το χρησιμοποιήσετε για να δημιουργήσετε λογότυπα επωνυμίας, να δημιουργήσετε εννοιολογικές διεπαφές χρήστη και να σχολιάσετε διαγράμματα.

Λοιπόν, πώς μπορείτε να δημιουργήσετε μια εφαρμογή βαφής;

Η ενότητα Tkinter and Pillow

Για να δημιουργήσετε μια εφαρμογή βαφής, θα χρειαστείτε τις ενότητες Tkinter και Pillow. Ο Tkinter είναι ένας από τους κορυφαία πλαίσια Python που μπορείτε να χρησιμοποιήσετε για να προσαρμόσετε το GUI σας. Είναι η τυπική ενότητα Python GUI για τη δημιουργία εφαρμογών επιφάνειας εργασίας. Το Tkinter έρχεται με μια ποικιλία γραφικών στοιχείων όπως ετικέτα, καταχώρηση, καμβάς και κουμπί.

instagram viewer

Το Pillow, ένα fork της Python Imaging Library (PIL), είναι μια ενότητα επεξεργασίας εικόνας για την Python. Με το Pillow, μπορείτε να ανοίξετε, να αλλάξετε το μέγεθος, να αναστρέψετε και να περικόψετε εικόνες. Μπορείς μετατροπή μορφών αρχείων, δημιουργήστε μια εφαρμογή εύρεσης συνταγών και λήψη τυχαίων εικόνων.

Για να εγκαταστήσετε αυτές τις μονάδες, εκτελέστε:

pip install tk pillow

Καθορίστε τη δομή της εφαρμογής βαφής

Μπορείτε να βρείτε ολόκληρο τον πηγαίο κώδικα για αυτό το έργο σε αυτό Αποθετήριο GitHub.

Ξεκινήστε εισάγοντας τις απαιτούμενες ενότητες. Ορίστε μια τάξη, DrawApp. Ορίστε τον τίτλο, το χρώμα του δείκτη και το χρώμα της γόμας. Κάντε την εφαρμογή ανοιχτή σε πλήρη οθόνη. Καλέστε το setup_widgets μέθοδος.

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()

Ορίστε μια μέθοδο που ονομάζεται setup_widgets. Καθορίστε μια ετικέτα που εμφανίζει μια επικεφαλίδα. Ορίστε το γονικό στοιχείο, το κείμενο που θέλετε να εμφανίζεται, το στυλ γραμματοσειράς, το χρώμα φόντου και το χρώμα του κειμένου. Ορίστε ένα πλαίσιο για την παλέτα χρωμάτων. Ορίστε το γονικό στοιχείο, το κείμενο που πρέπει να εμφανίζεται, τα στυλ γραμματοσειράς και το πλάτος του περιγράμματος. Ρυθμίστε το περίγραμμα ώστε να έχει μια εμφάνιση σαν κορυφογραμμή και το χρώμα του φόντου ως λευκό.

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)

Καθορίστε ένα σύνολο χρωμάτων για την παλέτα χρωμάτων σε μια λίστα. Επαναλάβετε πάνω του και δημιουργήστε ένα κουμπί για καθένα από αυτά. Ορίστε το γονικό στοιχείο, το χρώμα φόντου, το πλάτος του περιγράμματος και την εμφάνιση. Ορίστε επίσης το πλάτος και την εντολή που πρέπει να εκτελείται κάθε κουμπί όταν κάνετε κλικ. Οργανώστε όλα τα στοιχεία με κατάλληλη επένδυση και τα χρώματα σε σετ των δύο.

 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

Ομοίως, ορίστε ένα κουμπί για τη γόμα, ένα για να καθαρίσετε την οθόνη και ένα για να αποθηκεύσετε την εικόνα.

 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,
)

Ορίστε ένα γραφικό στοιχείο κλίμακας για να αυξήσετε ή να μειώσετε το μέγεθος του δείκτη ή της γόμας. Ορίστε το γονικό στοιχείο, τον προσανατολισμό, το εύρος και το μήκος σε pixel. Ορίστε έναν καμβά και ορίστε το γονικό στοιχείο, το χρώμα φόντου και το πλάτος του περιγράμματος. Επίσης, ρυθμίστε το ανάγλυφο να έχει εμφάνιση αυλάκωσης μαζί με το ύψος και το πλάτος του.

Τοποθετήστε τον καμβά με τις κατάλληλες συντεταγμένες και τοποθετήστε την άγκυρα στα βορειοδυτικά (πάνω αριστερά). Δέστε το Β1-Κίνηση στη λειτουργία βαφής. Β1 αναφέρεται στο αριστερό κουμπί του ποντικιού που κρατάτε πατημένο και Κίνηση αναφέρεται στην κίνηση. Συνολικά, το χρησιμοποιείτε για να παρακολουθείτε την κίνηση του ποντικιού ενώ πατάτε το αριστερό κουμπί.

 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)

Καθορίστε τα χαρακτηριστικά της εφαρμογής Paint

Ορίστε μια μέθοδο, χρώμα. Για να ζωγραφίσει, η εφαρμογή θα σχεδιάζει συνεχώς οβάλ λεπτού χρώματος. Αφαιρέστε 2 από το Χ και y συντεταγμένες του συμβάντος του ποντικιού για τον προσδιορισμό της επάνω αριστερής γωνίας του οβάλ. Προσθέστε 2 για να προσδιορίσετε την κάτω δεξιά γωνία του οβάλ. Δημιουργήστε ένα οβάλ χρησιμοποιώντας αυτές τις συντεταγμένες οριοθέτησης.

Ορίστε το χρώμα πλήρωσης, το χρώμα περιγράμματος και το πλάτος σύμφωνα με την επιλογή του δείκτη.

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(),
)

Ορίστε τρεις συναρτήσεις, select_color, γόμα, και, καθαρή οθόνη. ο select_color Η μέθοδος παίρνει ένα χρώμα και ορίζει τον δείκτη ανάλογα. ο γόμα Η μέθοδος ρυθμίζει τον δείκτη να έχει ένα εφέ σαν γόμα και τον κάνει να σχεδιάζει διαφανείς γραμμές. ο καθαρή οθόνη Η μέθοδος διαγράφει όλα τα στοιχεία στον καμβά.

defselect_color(self, col):
self.pointer = col

deferaser(self):
self.pointer = self.erase

defclear_screen(self):
self.canvas.delete("all")

Ορίστε μια μέθοδο, καμβάς_χρώμα. Ανοίξτε έναν επιλογέα χρώματος με όλα τα διαφορετικά χρώματα. Επιστρέψτε μια πλειάδα που περιέχει το χρώμα μέσα RGB μορφή και δεκαεξαδική μορφή. Εάν ο χρήστης επιλέξει ένα χρώμα, χρησιμοποιήστε το Διαμορφώστε μέθοδος ρύθμισης του χρώματος φόντου. Ρυθμίστε το χρώμα της γόμας στο ίδιο με το χρώμα του φόντου.

defcanvas_color(self):
color = colorchooser.askcolor()
if color:
self.canvas.configure(background=color[1])
self.erase = color[1]

Ορίστε μια μέθοδο, αποθήκευση ως. Ανοίξτε ένα παράθυρο διαλόγου αρχείου ζητώντας από τον χρήστη να επιλέξει το όνομα και τη διαδρομή του αρχείου. Εάν ο χρήστης επιλέξει μια διαδρομή, χρησιμοποιήστε το Pillow's ImageGrab τάξη για να καταγράψετε ολόκληρη την οθόνη. Περικόψτε την εικόνα χρησιμοποιώντας τις καθορισμένες συντεταγμένες για να αποκτήσετε την περιοχή του καμβά. Πειραματιστείτε με τις συντεταγμένες για να πιάσετε το επιθυμητό μέρος.

Αποθηκεύστε αυτό το αποτέλεσμα στην επιθυμητή διαδρομή αρχείου. Εμφανίστε ένα πλαίσιο μηνύματος που ενημερώνει τον χρήστη ότι το πρόγραμμα έχει αποθηκεύσει με επιτυχία τη βαφή ως εικόνα. Σε περίπτωση οποιουδήποτε σφάλματος, εμφανίζει το αντίστοιχο σφάλμα.

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}")

Δημιουργήστε ένα παράδειγμα του Tk και το DrawApp τάξη. ο mainloop() Η συνάρτηση λέει στην Python να εκτελέσει τον βρόχο συμβάντων Tkinter και να ακούει συμβάντα μέχρι να κλείσει το παράθυρο.

if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()

Δοκιμή διαφορετικών χαρακτηριστικών ζωγραφικής με χρήση Python

Όταν εκτελείτε το πρόγραμμα ζωγραφικής, θα δείτε μια εφαρμογή με μια παλέτα χρωμάτων, τέσσερα κουμπιά, ένα ρυθμιστικό και έναν καμβά για ζωγραφική:

Κάντε κλικ σε οποιοδήποτε χρώμα για να το επιλέξετε. Στη συνέχεια, μπορείτε να σχεδιάσετε στον καμβά σε αυτό το χρώμα με το αριστερό κουμπί του ποντικιού:

Κάνοντας κλικ στο Γόμα και σύροντας το ρυθμιστικό κάθετα προς τα πάνω, θα επιλέξετε τη γόμα και θα αυξήσετε το μέγεθός της. Δοκιμάστε τη γόμα σύροντάς την πάνω από το σχέδιό σας για να σβήσετε τις πινελιές.

Όταν κάνετε κλικ στο Καθαρή οθόνη κουμπί, το πρόγραμμα διαγράφει το προηγούμενο σχέδιό σας. Κάντε κλικ στο Ιστορικό κουμπί για να ανοίξετε μια παλέτα χρωμάτων και να την χρησιμοποιήσετε για να αλλάξετε το χρώμα του φόντου.

Κάνοντας κλικ στο Αποθήκευση σχεδίου κουμπί, ανοίγει ένα πλαίσιο διαλόγου αρχείου. Επιλέξτε μια διαδρομή και ένα όνομα για το αρχείο και το πρόγραμμα θα το αποθηκεύσει.

Βελτίωση της εφαρμογής Paint

Μπορείτε να βελτιώσετε τη λειτουργικότητα της εφαρμογής βαφής προσθέτοντας μια επιλογή για προσθήκη σχημάτων. Μπορείτε να δώσετε μια επιλογή για να επιλέξετε τον τύπο και την αδιαφάνεια του πινέλου. Προσθέστε μια επιλογή για προσθήκη κειμένου και αυτοκόλλητων. Προσθέστε μια επιλογή για αναίρεση, επανάληψη, αλλαγή μεγέθους και αναστροφή εικόνων. Αυτό θα κάνει τη διαδικασία σχεδίασης πολύ πιο ομαλή.

Για να δημιουργήσετε σχήματα, μπορείτε να χρησιμοποιήσετε μεθόδους όπως create_rectangle, create_oval, create_line και create_polygon. Για να προσθέσετε κείμενο και εικόνες, χρησιμοποιήστε τη μέθοδο create_text και create_image. Για να αλλάξετε το μέγεθος και να αναστρέψετε τις εικόνες, μπορείτε να χρησιμοποιήσετε τις μεθόδους αλλαγής μεγέθους και μεταφοράς του Pillow.