
برمجة تطبيق إنشاء الرسومات ببايثون و Tkinter: دليل تفصيلي للمبتدئين
بايثون لغة برمجة قوية ومتعددة الاستخدامات، ويمكن استخدامها لإنشاء تطبيقات متنوعة،
بما في ذلك تطبيقات إنشاء الرسومات. في هذا المقال، سنقوم بإنشاء تطبيق بسيط لإنشاء
الرسومات باستخدام مكتبة Tkinter، وهي مكتبة واجهة مستخدم رسومية (GUI)
مدمجة في بايثون. سنقوم بتغطية الخطوات الأساسية لإنشاء التطبيق، بدءًا من
إعداد الواجهة وحتى إضافة وظائف الرسم الأساسية.
خطوات برمجة تطبيق إنشاء الرسومات بإستخدام بايثون Python
هل تحلم بإنشاء تطبيقك الخاص للرسم؟ إليك دليل مبسط لخطوات برمجة
تطبيق إنشاء الرسومات، من البداية وحتى النهاية، باستخدام لغة بايثون ومكتبة Tkinter:
الخطوة 1: إعداد البيئة وتثبيت المكتبات
قبل البدء، تأكد من تثبيت بايثون على جهازك.
مكتبة Tkinter مدمجة في بايثون، لذا لا تحتاج إلى تثبيت أي مكتبات إضافية.
الخطوة 2: إنشاء نافذة التطبيق
أولاً، سنقوم بإنشاء نافذة التطبيق باستخدام Tkinter. إليك الكود:
import tkinter as tk
root = tk.Tk()
root.title("تطبيق الرسم ببايثون")
canvas = tk.Canvas(root, width=500, height=400, bg="white")
canvas.pack()
root.mainloop()
--
*شرح الكود :
- import tkinter as tk: استيراد مكتبة Tkinter.
- root = tk.Tk(): إنشاء نافذة التطبيق الرئيسية.
- root.title("تطبيق الرسم ببايثون"): تحديد عنوان النافذة.
- canvas = tk.Canvas(root, width=500, height=400, bg="white"):
إنشاء لوحة الرسم (Canvas) وتحديد أبعادها ولونها.
- canvas.pack(): إضافة لوحة الرسم إلى النافذة.
- root.mainloop(): بدء حلقة تشغيل التطبيق.
--
الخطوة 3: إضافة وظائف الرسم الأساسية
سنقوم الآن بإضافة وظائف الرسم الأساسية، مثل رسم الخطوط والمستطيلات والدوائر.
إليك الكود:
import tkinter as tk
root = tk.Tk()
root.title("تطبيق الرسم ببايثون")
canvas = tk.Canvas(root, width=500, height=400, bg="white")
canvas.pack()
def draw_line(event):
x1, y1 = event.x, event.y
x2, y2 = event.x, event.y
canvas.create_line(x1, y1, x2, y2, width=2)
canvas.bind("<B1-Motion>", draw_line)
root.mainloop()
--
*شرح الكود :
- def draw_line(event): تعريف دالة لرسم الخطوط.
- event.x, event.y: الحصول على إحداثيات مؤشر الفأرة.
- canvas.create_line(x1, y1, x2, y2, width=2): رسم خط بين النقطتين.
- canvas.bind("<B1-Motion>", draw_line): ربط حدث
حركة الفأرة (الزر الأيسر مضغوطًا) بدالة الرسم.
- يمكنك إضافة دوال أخرى لرسم المستطيلات والدوائر بنفس الطريقة.
الخطوة 4: إضافة أدوات الرسم
لجعل التطبيق أكثر سهولة في الاستخدام، سنقوم بإضافة أدوات رسم، مثل
أزرار لاختيار اللون وأشكال الرسم. إليك الكود:
import tkinter as tk
root = tk.Tk()
root.title("تطبيق الرسم ببايثون")
canvas = tk.Canvas(root, width=500, height=400, bg="white")
canvas.pack()
color = "black"
def set_color(new_color):
global color
color = new_color
color_frame = tk.Frame(root)
color_frame.pack()
colors = ["black", "red", "green", "blue", "yellow"]
for c in colors:
tk.Button(color_frame, bg=c, width=2, command=lambda col=c: set_color(col)).pack(side=tk.LEFT)
def draw_line(event):
x1, y1 = event.x, event.y
x2, y2 = event.x, event.y
canvas.create_line(x1, y1, x2, y2, width=2, fill=color)
canvas.bind("<B1-Motion>", draw_line)
root.mainloop()
--
*شرح الكود :
- color = "black": تحديد اللون الافتراضي للرسم.
- def set_color(new_color): تعريف دالة لتغيير اللون.
- color_frame = tk.Frame(root): إنشاء إطار لأزرار الألوان.
- tk.Button(...): إنشاء أزرار للألوان المختلفة.
- fill=color: تحديد لون الرسم.
الخطوة 5: إضافة وظائف إضافية
يمكنك إضافة وظائف إضافية إلى التطبيق، مثل:
مسح اللوحة، تغيير حجم الفرشاة، حفظ الرسومات، تحميل الرسومات،
إليك الأكواد الخاصة بالإضافات المذكورة في الخطوة الخامسة :
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk, ImageDraw
root = tk.Tk()
root.title("تطبيق الرسم ببايثون")
canvas = tk.Canvas(root, width=500, height=400, bg="white")
canvas.pack()
color = "black"
brush_size = 2
def set_color(new_color):
global color
color = new_color
def set_brush_size(new_size):
global brush_size
brush_size = new_size
color_frame = tk.Frame(root)
color_frame.pack()
colors = ["black", "red", "green", "blue", "yellow"]
for c in colors:
tk.Button(color_frame, bg=c, width=2, command=lambda col=c: set_color(col)).pack(side=tk.LEFT)
size_frame = tk.Frame(root)
size_frame.pack()
sizes = [1, 2, 3, 4, 5]
for s in sizes:
tk.Button(size_frame, text=str(s), command=lambda size=s: set_brush_size(size)).pack(side=tk.LEFT)
def draw_line(event):
x1, y1 = event.x, event.y
x2, y2 = event.x, event.y
canvas.create_line(x1, y1, x2, y2, width=brush_size, fill=color)
canvas.bind("<B1-Motion>", draw_line)
def clear_canvas():
canvas.delete("all")
clear_button = tk.Button(root, text="مسح", command=clear_canvas)
clear_button.pack()
def save_image():
file_path = filedialog.asksaveasfilename(defaultextension=".png")
if file_path:
x = root.winfo_rootx() + canvas.winfo_x()
y = root.winfo_rooty() + canvas.winfo_y()
x1 = x + canvas.winfo_width()
y1 = y + canvas.winfo_height()
ImageGrab.grab((x, y, x1, y1)).save(file_path)
save_button = tk.Button(root, text="حفظ", command=save_image)
save_button.pack()
def load_image():
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
if file_path:
image = Image.open(file_path)
photo = ImageTk.PhotoImage(image)
canvas.image = photo
canvas.create_image(0, 0, image=photo, anchor=tk.NW)
load_button = tk.Button(root, text="تحميل", command=load_image)
load_button.pack()
root.mainloop()
--
* شرح الأكواد:
* مسح اللوحة:
- clear_canvas(): تقوم هذه الدالة بمسح جميع العناصر الموجودة على
اللوحة باستخدام canvas.delete("all").
- clear_button: زر يستدعي دالة المسح عند الضغط عليه.
* تغيير حجم الفرشاة:
- brush_size: متغير لتخزين حجم الفرشاة.
- set_brush_size(new_size): دالة لتغيير حجم الفرشاة.
- size_frame: إطار لأزرار تغيير الحجم.
- sizes: قائمة بأحجام الفرشاة المتاحة.
- tk.Button(...): أزرار لتغيير حجم الفرشاة.
- width=brush_size: استخدام حجم الفرشاة الحالي في دالة الرسم.
*حفظ الرسومات:
- save_image(): دالة لحفظ الصورة.
- filedialog.asksaveasfilename(): فتح نافذة لحفظ الملف.
- ImageGrab.grab(...): التقاط صورة للوحة الرسم.
- image.save(file_path): حفظ الصورة في الملف المحدد.
- save_button: زر يستدعي دالة الحفظ عند الضغط عليه.
*تحميل الرسومات:
- load_image(): دالة لتحميل صورة.
- filedialog.askopenfilename(): فتح نافذة لاختيار الملف.
- Image.open(file_path): فتح الصورة باستخدام مكتبة PIL.
- ImageTk.PhotoImage(image): تحويل الصورة إلى كائن يمكن عرضه في Tkinter.
- canvas.create_image(...): عرض الصورة على اللوحة.
- load_button: زر يستدعي دالة التحميل عند الضغط عليه.
* ملاحظات:
- تأكد من تثبيت مكتبة PIL (Pillow) لتشغيل دوال حفظ وتحميل الصور.
- يمكنك إضافة المزيد من الأدوات والوظائف إلى التطبيق لتجعله أكثر اكتمالًا.
- يمكنك تعديل الأكواد لتناسب احتياجاتك وتفضيلاتك.
لقد قمنا في هذا المقال بإنشاء تطبيق رسم بسيط باستخدام بايثون ومكتبة Tkinter.
يمكنك استخدام هذا التطبيق كنقطة بداية لاستكشاف المزيد من إمكانيات
مكتبة Tkinter وتطوير تطبيقات رسومات أكثر تعقيدًا.