קידוד אפליקציית הצבע שלך הוא תרגיל קלאסי שילמד אותך הרבה על תכנות GUI.
כלי צבע פשוט הוא אחד האפליקציות הנפוצות ביותר שתוכל למצוא ברוב המחשבים. זה מאפשר לאמן לעשות טעויות ללא חשש, לבחור כל צבע בלחיצת כפתור ולשנות את גודל משיכות המכחול שלו באופן מיידי. אתה יכול להשתמש בו כדי ליצור לוגו מותג, להמשיג ממשקי משתמש ולהערות דיאגרמות.
אז איך אפשר לבנות יישום צבע?
מודול ה-Tkinter והכריות
כדי לבנות יישום צבע, תזדקק למודולי Tkinter וכרית. Tkinter הוא אחד מה מסגרות Python מובילות בהן תוכל להשתמש כדי להתאים אישית את ה-GUI שלך. זהו מודול ה-Python GUI הסטנדרטי ליצירת יישומי שולחן עבודה. Tkinter מגיע עם מגוון ווידג'טים כמו תווית, כניסה, קנבס וכפתור.
כרית, מזלג של ספריית הדמיה של Python (PIL), היא מודול עיבוד תמונה עבור Python. עם כרית, אתה יכול לפתוח, לשנות גודל, להפוך ולחתוך תמונות. אתה יכול להמיר פורמטים של קבצים, בנה יישום למציאת מתכונים, וכן להביא תמונות אקראיות.
כדי להתקין את המודולים האלה, הפעל:
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,
)
הגדר ווידג'ט קנה מידה כדי להגדיל או להקטין את גודל המצביע או המחק. הגדר את רכיב האב, הכיוון, הטווח והאורך בפיקסלים. הגדר קנבס והגדר את אלמנט האב, צבע הרקע ורוחב הגבול. כמו כן, הגדר את התבליט למראה חריץ יחד עם הגובה והרוחב שלה.
מקם את הבד עם קואורדינטות מתאימות והגדר את העוגן לצפון מערב (משמאל למעלה). לאגד את B1-Motion לפונקציית הצבע. B1 מתייחס ללחצן העכבר השמאלי שהוחזק לחוץ ו תְנוּעָה מתייחס לתנועה. בסך הכל, אתה משתמש בו כדי לעקוב אחר תנועת העכבר בזמן שאתה לוחץ על הכפתור השמאלי.
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)
הגדר את התכונות של יישום הצבע
הגדירו שיטה, צֶבַע. כדי לצייר, האפליקציה תצייר ללא הרף אליפסות דקות. הורידו 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(),
)
הגדירו שלוש פונקציות, בחר צבע, מַחַק, ו, מסך נקי. ה בחר צבע השיטה לוקחת צבע ומגדירה את המצביע בהתאם. ה מַחַק השיטה מגדירה למצביע אפקט דמוי מחק וגורמת לו לצייר קווים שקופים. ה מסך נקי השיטה מוחקת את כל הפריטים על הקנבס.
defselect_color(self, col):
self.pointer = coldeferaser(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]
הגדירו שיטה, שמור כ. פתח תיבת דו-שיח של קובץ המבקשת מהמשתמש לבחור את שם הקובץ והנתיב. אם המשתמש בוחר נתיב, השתמש בכרית 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() הפונקציה אומרת לפייתון להפעיל את לולאת האירועים של Tkinter ולהקשיב לאירועים עד שתסגור את החלון.
if __name__ == "__main__":
root = tk.Tk()
app = DrawApp(root)
root.mainloop()
בדיקת תכונות ציור שונות באמצעות Python
כאשר אתה מפעיל את תוכנית הצביעה, תראה אפליקציה עם לוח צבעים, ארבעה כפתורים, מחוון אחד וקנבס לצייר עליו:
לחץ על צבע כלשהו כדי לבחור אותו. לאחר מכן תוכל לצייר על הבד בצבע זה עם לחצן העכבר השמאלי:
בלחיצה על מַחַק כפתור וגרירת המחוון אנכית למעלה, תבחר את המחק ותגדיל את גודלו. בדוק את המחק על ידי גרירתו על הציור שלך כדי למחוק את המשיכות.
כאשר אתה לוחץ על מסך נקי לחצן, התוכנית מנקה את הציור הקודם שלך. לחץ על רקע כללי לחצן כדי לפתוח לוח צבעים ולהשתמש בו כדי לשנות את צבע הרקע.
בלחיצה על שמור ציור לחצן, תיבת דו-שיח של קובץ נפתחת. בחר נתיב ושם לקובץ, והתוכנית תשמור אותו.
שיפור יישום הצבע
אתה יכול לשפר את הפונקציונליות של יישום הצבע על ידי הוספת אפשרות להוספת צורות. אתה יכול לתת אפשרות לבחור את סוג המברשת ואת האטימות. הוסף אפשרות להוספת טקסט ומדבקות. הוסף אפשרות לביטול, מחדש, שינוי גודל והיפוך תמונות. זה יהפוך את תהליך הציור להרבה יותר חלק.
כדי ליצור צורות, אתה יכול להשתמש בשיטות כגון create_rectangle, create_oval, create_line ו-create_polygon. כדי להוסיף טקסט ותמונות, השתמשו בשיטת create_text ו- create_image. כדי לשנות גודל ולהפוך תמונות, אתה יכול להשתמש בשיטות שינוי הגודל והטרנספוז של כרית.