📚 رسم شكل بيضاوي
المفاهيم الأساسية
دالة رسم بيضاوي: `canvas.create_oval(x1, y1, x2, y2)`
(x1, y1): إحداثيات الزاوية اليسرى العلوية للمستطيل المحيط.
(x2, y2): إحداثيات الزاوية اليمنى السفلية للمستطيل المحيط.
خريطة المفاهيم
```markmap
بناء واجهات المستخدم الرسومية (GUI) بلغة بايثون
النموذج البرمجي تيكينتر (tkinter)
وظيفته
- يحتوي على نصوص برمجية جاهزة
- يستخدم لرسم أشكال ورسومات على نافذة
المكون الأساسي: لوحة الرسم (Canvas)
- منطقة مستطيلة للرسم
- يمكن وضع رسومات أو نصوص أو عناصر واجهة فيها
#### نظام إحداثيات لوحة الرسم
##### الفرق عن النظام الديكارتي
- الأصل (0،0) في الزاوية اليسرى العليا
- إحداثيات x: تزيد باتجاه اليمين (مثل النظام الديكارتي)
- إحداثيات y: تزيد باتجاه الأسفل (عكس النظام الديكارتي)
##### النموذج الأساسي
- البكسل
- الإحداثيات تُعبر عنها كأعداد صحيحة
خطوات إنشاء نافذة الرسم
1. استيراد النموذج
2. إنشاء النافذة الأساسية
3. ضبط لوحة الرسم (الحجم واللون)
4. وضع العناصر على النافذة
#### رسم الخطوط
##### الدالة
- canvas.create_line(x-start, y-start, x-end, y-end)
##### المعاملات
- إحداثيات x و y لبداية ونهاية الخط
- يمكن استخدام عوامل تعيئة وعرض "القلم"
##### أمثلة عملية
###### رسم خطين متقاطعين
- خط أحمر عريض من (10,10) إلى (100,100)
- خط ذهبي أقل عرضاً من (10,100) إلى (100,10)
###### رسم خطوط أفقية متعددة باستخدام حلقة
- إنشاء 10 خطوط برتقالية أفقية
- عرض الخط يزداد مع كل تكرار (width=i)
- المسافة بين الخطوط 15 بكسل (i*15)
###### رسم مثلث
- باستخدام `create_line` مع سلسلة من الإحداثيات
- مثال: `canvas.create_line(240,20, 160,100, 320,100, 240,20)`
- الإحداثيات: (240,20) قمة، (160,100) يسار، (320,100) يمين
#### رسم المستطيلات
##### الدالة
- canvas.create_rectangle(x1, y1, x2, y2)
##### المعاملات
- x1, y1: إحداثيات الزاوية العلوية اليسرى
- x2, y2: إحداثيات الزاوية السفلية اليمنى
- width: عرض حدود المستطيل
- outline: لون حدود المستطيل
- fill: اللون الداخلي للمستطيل
##### أمثلة عملية
###### مثال 1: مستطيل أبيض بحدود مرجانية
- `canvas.create_rectangle(100,150,400,250,width=3, outline="coral",fill="white")`
- خلفية اللوحة: لون البط البري (teal)
###### مثال 2: مستطيل أخضر
- `canvas.create_rectangle(30,10,120,80,width=5, fill="green")`
- خلفية اللوحة: لون البط البري (teal)
#### رسم الأشكال البيضاوية
##### الدالة
- canvas.create_oval(x1, y1, x2, y2)
##### المعاملات
- x1, y1: إحداثيات الزاوية العلوية اليسرى للمستطيل المحيط
- x2, y2: إحداثيات الزاوية السفلية اليمنى للمستطيل المحيط
- width: عرض حدود الشكل
##### العلاقة بين المستطيل المحيط والشكل
- يتم رسم البيضاوي داخل المستطيل المحدد بالإحداثيات (x1, y1) و (x2, y2)
- إذا كان المستطيل المحيط مربعاً (عرضه = ارتفاعه)، يصبح الشكل المرسوم دائرة
##### مثال عملي
- `canvas.create_oval(50,50,300,300,width=3)`
- خلفية اللوحة: لون البط البري (teal)
- النتيجة: دائرة لأن (300-50) = (300-50)
تحديد الألوان في تيكينتر
الطريقة الأولى: الأسماء المعيارية
- أبيض، أسود، أحمر، أزرق، أخضر، سماوي، أصفر، أرجواني
الطريقة الثانية: نموذج RGB
- تحديد اللون باستخدام 3 أرقام تمثل نسب الأحمر والأخضر والأزرق
#### خصائص نموذج RGB
- كل لون (أحمر، أخضر، أزرق) له قيمة بين 0 و 255
- مثال: الأحمر = (255,0,0)، الأخضر = (0,255,0)، الأزرق = (0,0,255)
التعامل مع أحداث الفأرة ولوحة المفاتيح
ربط الأحداث
- الصيغة: widget.bind(event, handler)
فئات الأحداث الرئيسية
#### أحداث الفأرة
- : زر الفأرة الأيسر
- : الضغط المزدوج على زر الفأرة الأيسر
- : إدخال مؤشر الفأرة إلى نافذة تيكينتر
- : إخراج مؤشر الفأرة من نافذة تيكينتر
#### أحداث لوحة المفاتيح
الحصول على إحداثيات الفأرة
#### آلية العمل
- ربط حدث الفأرة (مثل ``) بدالة معالجة (callback function)
- تمرير كائن الحدث (event) إلى الدالة
- استخراج إحداثيات النقطة من `event.x` و `event.y`
#### مثال: طباعة الإحداثيات عند النقر
- `canvas.bind("", callback)`
- `def callback(event): print("clicked at", event.x, event.y)`
#### مثال: طباعة الإحداثيات عند النقر المزدوج
- `canvas.bind("", callback)`
```
نقاط مهمة
- يتم رسم الشكل البيضاوي داخل مستطيل وهمي تحدده إحداثياته.
- إذا كان المستطيل المحيط مربعاً، يصبح الشكل المرسوم دائرة.
- مثال الكود يرسم دائرة لأن الفرق بين الإحداثيات الأفقي والرأسي متساوٍ (250 بكسل).