يعد ترميز تطبيق الطلاء الخاص بك تمرينًا كلاسيكيًا سيعلمك الكثير عن برمجة واجهة المستخدم الرسومية.

تعد أداة الطلاء البسيطة واحدة من أكثر التطبيقات شيوعًا التي يمكنك العثور عليها على معظم أجهزة الكمبيوتر. فهو يتيح للفنان ارتكاب الأخطاء دون خوف، واختيار أي لون بنقرة زر واحدة، وتغيير حجم ضربات الفرشاة على الفور. يمكنك استخدامه لإنشاء شعارات العلامة التجارية، وتصور واجهات المستخدم، والتعليق على الرسوم البيانية.

إذًا، كيف يمكنك إنشاء تطبيق طلاء؟

وحدة Tkinter والوسادة

لإنشاء تطبيق طلاء، ستحتاج إلى وحدتي Tkinter وPellow. تكينتر هي واحدة من أهم أطر عمل Python التي يمكنك استخدامها لتخصيص واجهة المستخدم الرسومية الخاصة بك. إنها وحدة Python GUI القياسية لإنشاء تطبيقات سطح المكتب. يأتي Tkinter مع مجموعة متنوعة من الأدوات مثل الملصق والإدخال والقماش والزر.

الوسادة هي فرع من مكتبة تصوير بايثون (PIL)، وهي وحدة معالجة صور لبيثون. باستخدام الوسادة، يمكنك فتح الصور وتغيير حجمها وقلبها واقتصاصها. أنت تستطيع تحويل صيغ الملفات، وإنشاء تطبيق للبحث عن الوصفات، و جلب صور عشوائية.

لتثبيت هذه الوحدات، قم بتشغيل:

pip install tk pillow
instagram viewer

تحديد هيكل تطبيق الطلاء

يمكنك العثور على الكود المصدري الكامل لهذا المشروع في هذا مستودع جيثب.

ابدأ باستيراد الوحدات المطلوبة. تحديد فئة، 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-الحركة إلى وظيفة الطلاء. ب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)

تحديد ميزات تطبيق الرسام

تحديد الطريقة، طلاء. للرسم، سيقوم التطبيق برسم أشكال بيضاوية دقيقة بشكل مستمر. اطرح 2 من س و ذ إحداثيات حدث الماوس لتحديد الزاوية اليسرى العليا للشكل البيضاوي. أضف 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 = 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]

تحديد الطريقة، save_as. افتح مربع حوار ملف يطلب من المستخدم اختيار اسم الملف ومساره. إذا قام المستخدم بتحديد مسار، استخدم وسادة 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}")

إنشاء مثيل لـ المعارف التقليدية و ال DrawApp فصل. ال الحلقة الرئيسية () تخبر الوظيفة Python بتشغيل حلقة حدث Tkinter والاستماع إلى الأحداث حتى تغلق النافذة.

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

اختبار ميزات الرسم المختلفة باستخدام بايثون

عند تشغيل برنامج الطلاء، سترى تطبيقًا يحتوي على لوحة ألوان وأربعة أزرار ومنزلق واحد ولوحة قماشية للرسم عليها:

انقر فوق أي لون لتحديده. يمكنك بعد ذلك الرسم على اللوحة القماشية بهذا اللون باستخدام زر الماوس الأيسر:

عند النقر على ممحاة الزر وسحب شريط التمرير عموديًا لأعلى، ستحدد الممحاة وتزيد حجمها. اختبر الممحاة عن طريق سحبها فوق الرسم لمسح الحدود.

عند النقر فوق شاشة واضحة الزر، يقوم البرنامج بمسح الرسم السابق. انقر على خلفية زر لفتح لوحة الألوان واستخدامها لتغيير لون الخلفية.

عند النقر على حفظ الرسم الزر، يفتح مربع حوار ملف. اختر مسارًا واسمًا للملف، وسيقوم البرنامج بحفظه.

تعزيز تطبيق الطلاء

يمكنك تحسين وظيفة تطبيق الطلاء عن طريق إضافة خيار لإضافة الأشكال. يمكنك إعطاء خيار لتحديد نوع الفرشاة والتعتيم. إضافة خيار لإضافة النص والملصقات. إضافة خيار للتراجع عن الصور وإعادتها وتغيير حجمها وقلبها. وهذا سيجعل عملية الرسم أكثر سلاسة.

لإنشاء أشكال، يمكنك استخدام طرق مثل create_rectangle، و create_oval، و create_line، و create_polygon. لإضافة نص وصور، استخدم طريقة create_text و create_image. لتغيير حجم الصور وقلبها، يمكنك استخدام أساليب تغيير الحجم والتبديل الخاصة بالوسادة.