طيب و جماعة السلام عليكم هنكمل إن شاء الله محاضرة
عادي في موضوع ال graphical user interface أو
التصميم الواجهات بدأنا المحاضرة الماضية أخذنا مقدمة
على ال PyQt وشفنا يا جماعة أن الـ PyQt فعليًا كل
مكوّن من مكونات الـ GUI له class بتمثله يعني مثلًا
ال window فيه class اسمها QWidget ال label له
class اسمها QLabel و هكذا كل item موجود في الشاشة
زي مثلًا ال label زي مكان المربع الإدخال زي مثلًا
drop list أو القائمة المنسدلة وغيره وغيره كل عنصر
من العناصر هذه له class تمثله في ال library بتاعة
ال PyQt اليوم إن شاء الله هنكمل هناخد بعض ال GUI
components الإضافية غير اللي أخذناها المحاضرة
الماضية المحاضرة الماضية أخذنا بس ال label و ال
button صح بدأنا في ال button المحاضرة الماضية
اللي هو بتمثل class اسمها QPushButton طيب خليها
الآن نبدأ نشتغل في برنامج بدأ أكثر من البداية طبعًا
في الأول بعمل لل imports
تمام هذا ال import اللي بنعمله في البداية وبعدين
قلنا بنعمل متغير من نوع QApplication على أساس إن
هو المسؤول عن تشغيل نافذة بتاعتي و
في الآخر بعمله execute هنا الآن بين السطر الأول و
الأخير بكتب تصميم الواجهة بتاعتي لأن أول حاجة
قلنا بنعملها بنعمل window بعمل أي متغير وليكن WQ
Widget لأن
هذه بتعمل ال window لأن بدي أُحدد إعدادات ال window
شفنا المحاضرة الماضية بنعمل أمور كثيرة مثلًا set
window title وممكن
أحدد حجم ال window وشفنا كيف نحط ال window حجمها
جد حجم الشاشة تمام بعمل متغير من QDesktopWidget هذا
الوجد وهذا QDesktopWidget فيه method اسمه screen
هذا برجعه لمتغير وليكن S مثلًا لأن بروح لل window
بتاعتي بقوله resize وبعطيله S. بجيب ال width
من ال S وبجيب ال height من ال S كمان
بعد الآخر عادي عشان أظهر النافذة S.show طيب
هيُشغل النافذة شفنا أمور ثانية مثلًا كيف نغير ال
icon بتاعة النافذة وهكذا كيف أغير إعدادات النافذة
باستخدام
style sheets وباستخدام CSS عادي أخذنا الآن بعض ال
components اللي موجودة جوا ال window اللي بنحطها
جوا ال window مثلًا ال label بننشئ متغير ال مثلًا Q
Label وعشان أحط ال label ده جوا ال window ببعث في
ال initializer تبعه في ال constructor ال parent
اللي هو ال W اللي هي ال window لأن بأجيب خلال
الواحد في بعض ال methods اللي بقدر أغير فيها
إعداداته زي مثلًا set text بحط النص الموجود في ال
label set text
الآن الإعدادات أسهل طريقة لتغييرها اللي هي set
style sheet وبصير أكتب style
sheet
و ممكن في الآخر أغير أو أُحدد مكان ال label عن طريق
move أو set geometry move مثلًا خلينا نقوله في
المكان ثلاثمئة ثلاثمئة و
في الآخر بعمل show لل window كله
لأن هاي اللعب اللي حطيته طب أنا حطيته آه غلطان في
white
طيب وشفنا كمان كيف نحط في ال label صورة صح؟ ونغير
حجم الصورة كمان بعدين بدأنا في ال button قلنا عشان
نعمل button برضه في عندنا كلاس اسمه QPushButton
بننشئ منها object فبنعمل متغير اسمه button واحد
ونقوله QPushButton الآن
شفنا ال initializer بتاع ال QPushButton بياخد ال
parent الـ W وبعدين بحدد إعدادات ال button بقوله
مثلًا set text click
here مثلًا ونفس ال label ممكن أُحدد إعدادات لل
button التنسيق طبعًا button واحد برضه set style
sheet بقوله بس font size
طب هاي ال button اللي أنا عملته المحاضرة الماضية
بدنا نعمل action على ال button عشان action يعني
لما أضغط على ال button بده ينفذ حاجة معينة طبعًا
كيف بنعمل action على ال button طبعًا أنا الآن نفس
النمط موجود في كل ال GUI items يعني كثير من ال GUI
items عليهم actions كلمة action معناها شيء بدي
يتنفذ لما أُتفاعل معه ال item البطل مثلًا ايش نوع
التفاعل معه click تمام في مثلًا كمان شوية هنشوف
حاجة اسمها drop list اللي هي القائمة المنسدلة ايش
نوع التفاعل معه لما أختار أي item منها تمام هذا
تفاعل يُعتبر صح مصادر الإدخال اللي بكتب فيه نص ايش
نوع التفاعل معه أنه يتغير محتوى إن أكتب فيه
characters أحيانًا احنا بدنا لما يصير في تغيير أو
تفاعل مع ال items بده يصير action معين بده يصير
حدث معين هذا الحدث مش أنا بشغله هو بيشتغل لحاله
لما ال item يتم التفاعل معه طيب فإيش الطريقة اللي
بنستخدمها مع كل ال items إنه بنكتب اسم ال object
تبع ال item اللي هو مثلًا button بنعمل . وبنحدد ايش
ال action الحدث اللي صار أو التغيير اللي صار في ال
button مثلًا أنا عندي هنا في clicked مش click لأ في
ايش clicked clicked معناه ماله انضغط هذا فعل ماضي
clicked صح؟
طيب في مثل ال event ثاني اسمه released، ايش هي
released؟ انُطلق، تمام؟ يعني حتى ممكن مش بس أشغل
event أو function معينة لما ال button اضغط عليه، ممكن
كمان لو أنا أضغط عليه وأسبته ينفذ function ثاني فالآن
انت بده يتنفذ الحدث اللي أنا بدي إياه بحدده من خلال
ال object بضغط . وبحدد ال action اللي بدي إياه هنا
مثلًا هو يعني ما عطيني أكثر من خيار في ال button
الخيار الشائع إنه أنا بدي أضغط على ال button وبدي
ينفذ شيء صح فهو أجيب ليه clicked هنا بختار clicked
طبعًا بشوف الأقصر هدول كلمة clicked طيب لما يصير
clicked ايش بدي أعمل؟ بدي أقوله اربط لي مع
function يعني بدي أكون أنا عامل function بحيث إنه
لما يصير ال button clicked بدي أشغل ال function
هذه كيف بدي أربط ال button مع ال function في حالة
ال click؟ ده ال button بضغط clicked تمام وبعمل
. وبقوله connect بين الأقواس بتاعة ال connect
بكتب اسم ال function اللي بدي إياه هتُنفذ لما أعمل
click ال function هذه أين بكتبها بكتبها فوق آه
لازم عشان يعرف يعني احنا خلينا
نجرب عشان نتأكد هيدف مثلًا بنسميها print_message
تمام
بتقوله print button pressed هذه الرسالة اللي أنا بدي
أُطبعها إن لو انضغط ال button هيُطبع لي button pressed طيب
تعال شوف أحطها تحت ونعمل
connect وحط اسم ال function هنا بدون أقواس هيُطلع لي
error يبقى لازم تكون في الأول
عرفت ال function الآن بجي بيحكي له button.clicked
.connect معناه لما يكون ال button clicked هيُشغل ال
function اسمها print_message طب تعال نشوف
طيب النتيجة وين طلعت؟ هاي وهنا يعني أنا كل ما أضغط
على ال button بطبع لي بطبع لي message طيب أنا حابب
أن ال message هذه يعني احنا روحنا على ال GUI عشان
نرجع ثاني على ال command أو ال input هذا لأ بدنا
نطلع رسالة داخل النافذة يقول إن ال button pressed
فنعمل نطبع message داخل ال window كيف نطبع ال
message هذه؟ أول حاجة من وين طبعت ال message
بالـ def في ال function صح ولا يا جماعة
طباعة الـ button بتتم هنا فبالدرجة على الـ function
هذا و هذا الـ code بتاع الـ print بديش إياه ليش بديش
إياه لأنه بطبع فيه الـ command طبعا طيب اللي هم
يطبع في message الـ message زيها زي الـ button زي ال
label لها class معين إيش هي اسمها QMessageBox
Message Box من اسمها إيش يعني Message Box صندوق
لرسالة تمام طيب هي النافذة الصغيرة بتطلع فيها
رسالة بتسميها Message Box أنا عشان أطلع رسالة بدي
أعمل متغير من QMessageBox بعمل متغير وأنا أكون
اسمه M يساوي QMessageBox بفتح قوس وعشان تنعرض
الـ message دي داخل النافذة الأساسية اللي هي من
النافذة الأساسية W صح بحط هنا W طيب
الـ message دي أنا أنشأتها الآن بدي أحط داخلها
message بدي أحط داخلها نص و title مين بتحكم فيه
أنا كمبرمج بدي أقول له داخل الـ M دي أقدر أعمل dot
وفي برضه مثل اسمها setText إيش بدك تكتب هنا مثلا
button pressed
طيب
ممكن كمان أقوله M setWindowTitle هدي setWindow
title لمين؟ للمسج، تمام؟ أنا بغير عنوان المسج
طيب و في الآخر عشان أعرض الـ message بقول له m.exec
execute مش الـ window الكبيرة لما بقول في ال
application بقول execute الـ window برضه بقوله
execute لأن هذا كل الـ code إيه هيتنفذ لما
تتنفذ الـ print message إيه تتنفذ الـ print message
لما أضغط على الـ button طبعا تعالوا نجرب الـ code هذا
طبعا
هاي الـ message طلعت عنده هنا
طيب ممكن كمان أجري الـ message أقول له الـ setDetail
text إيش هذا detail text تفاصيل تمام this is a
useless message إيش هذه التفاصيل و أنا بتعرض
تعالوا نشوف عندما تقوم بالضغط على البطون، سيظهر لك
تفاصيل التفاصيل الموجودة في البطون
طيب، ابغط على الـ button يغير النص اللي في الـ
label بقدر أعملها و أنا لأ ابغط على الـ button أغير
النص اللي في الـ label فلان نفس الحاجة بقوله
connect و نفذ الـ method لأن في الـ method هذه بغير
الـ code اللي هنا بدل من يطبع ليه في message
الآن أنا بدي أروح لمين؟ للـ label اللي هو إيش الـ ..
الواحد و بقوله setText و بكتب button pressed
هذا الكلام وين هينكتب؟ جوا الـ label متى؟ لما ينضغط
على الـ button طيب
لأن ضغط على الـ button هيغيرنا المحتوى النص تمام و
ممكن كمان أجي هنا أضيف سطر أحكيله الواحد dot
adjustSize إيش يعني كلمة adjust adjust يعني عدل
أو اطبط تمام بمعنى إن أفرض النص اللي أنا حاطيته
هنا كان كبير شوية مثلا تعالوا نشوفها كده إيش هيصير لها
لأن
النص كبير جدا لو أنا مش حاطط adjustSize نص الكلام
مش هيبين لأنه كان حجم النص على قد النص السابق لما
اتغير النص ماعدلش حجم الـ label عشان يجعل قد حجم
النص اللي فيه ف adjustSize بتخلي حجم النص يتلاقم
حجم الـ label يتلاقم حجم النص اللي فيه يعني أنا لو
أنا عملت run وبضغط على click here شايفين صغر لأن حجم
النص هنا صغير طيب هذا بالنسبة للـ button شوفنا كيف
ننشأ button وكيف لما نضغط على button ننفذ action
معين طيب نشوف item ثاني كل الآن المحاضرة هتكون
عبارة عن items نخلص واحد و ندخل في الثاني و تقريبا
كلهم استخدامهم نفس الطريقة بس الواحد يتعلم الـ
methods المهمة الموجودة لكل item خلّيني أشوف أيضًا
item ثاني شائع في نفس الـ class اللي هو المربع
الإدخال لأن أنا في البرامج بدي أعمل مربع عشان أدخل
فيه مثلًا username password نص معين تمام؟ إيش هو
هذا؟ الواحد
في class اسمها QLineEdit
ده
سميها LE1 Line Edit لأن أنا عملت object من الـ
class اسمها إيش اسمها؟ Line Edit من اسمها إيش يعني
Line Edit؟ Edit يعني معناها ممكن أعدل عليه Line
معناها إن هذا عبارة عن سطر واحد مش multiline
المربعات الإدخال في منها نوعين في single line وفي
multiline single line يعني بيكون سطر واحد
multiline معناها ممكن زي text area هذا الـ QLineEdit
فقط سطر واحد
طيب الآن Line Edit واحد بدي أقوله move مثلا
أربع ستماية تلات
مية تعالوا شوفوا تمام هايه هنا جاي على الـ label
شايفينه بدي ازحزح شوية خليها ده إيش 800 الـ X بعدين
LE1 برضه بدي أقوله 6 style sheet عشان أغير حجم
الخط اللي فيه مثلا font size
طبعا طلع برا الشاشة شوية طب
هذا الـ line الـ Line Edit
كود صغير نعدل عليه نضغط على الـ .. الـ click here
ياخد النص الموجود هنا و يطبع ليه معينة إن في
message يعني مثلا .. بنجي
على الـ button لما أضغط على الـ button بنفذ الـ
method print message داخل الـ method print message
إيش بدي أعمل؟ بدي أقرأ النص الموجود جوا الـ input و
أطبعه في message فبدي أقوله le1 و بدي أقوله text
في مثل اسمها text إيش بتعمل؟ بتجيب للنص الموجود زي
الـ label لو بدي أغير النص الموجود فيه بقوله set
text بدي أجيب النص اللي فيه بقوله text هذا بخزنه
في متغير اسمه مثلا T وبعدين بحكيله M يساوي Q
MessageBox ليش عملت MessageBox؟ ليش عملت message
box؟ عشان أقرأ بالنص setText T وبعدين M.exec
مثلا
hello طبعا هاي الطباعة اللي hello
طيب بيقدر نعمل action على .. على الـ Line Edit إيش
يعني action؟ يعني بيبدي أنا لما يصير فيه تغيير على
الـ Line Edit ينفذ حدث معين زي إيش مثلا؟ لأن كل
كلمة بتبعت رسالة على الجوال صح؟ أو في الـ twitter
مثلا لما الواحد يكتب tweet بيعدله كام character
اتغير أو في الـ message لما أكتب رسالة بيعدلي كام
حرف ضايق طبعا؟ هذا event حدث معين امتى بيشتغل طول
ما المحتوى المربع النص هذا الإدخال بتغير بيروح
automatically بيغير الرقم المعروض للمستخدم صح ولا
لأ يبقى أنا بدنا نفذ event بدّه يتنفذ تلقائي إن كل
ما يصير فيه تغيير على حجم النص المربع الإدخال يرد
التغيير هذا زي الـ button كل ما يصير فيه ضغط على
الـ button بنفذ الـ function لأن كل ما يصير فيه
تغيير في حجم النص الموجود داخل الـ edit text الـ
Line هذا بيردني التغيير هذا طيب، إيش مينعمل الآن؟
على نفس المثال اللي عندنا، احنا مش عندنا label
وعندنا Line Edit بدي الـ Line Edit كل ما يتغير حجم
النص اللي فيه يروح يرد لي عدد الـ characters في الـ
label وهذا إيش بدي أعمل؟ هاي هنا بدي كل ما أنا كتبت
أحرف جديدة عدد الـ characters اللي هنا يتغير يعني
هذا يشيل الكلام اللي هنا يكتب ليه number of
characters يساوي كذا معايا ولا لأ يا جماعة؟ طيب
إيش بدي أعمل؟ في الحالة هذه بدي أعمل event أو
action على الـ Line Edit كيف؟ بروح للـ Line Edit
وبعمل dot قبل شوية قلبته اللي كان فيه clicked صح
اللي أنا بضغط على event مناسب لي ما أعرفش إيش هو
تعالوا ننزل نشوف إيش فيه
طيب في حاجة هنا انتظر معايا شوف الـ events
الموجودة في event مثلا اسمه text هي عليه المؤشر ال
text changed ايش هي text changed النص اتغير هذا
فيها الماضي صح changed يعني اتغير text changed
اتغير النص في selection changed ايش يعني تمام
تحديد النص اتغير في case or position changedمكان المؤشر اتغير
أنا ممكن اختار أي event من هدول مثلا
أنا اللي مناسب لي في الحالة هذه اللي هو مين text
changed اتغير النص الموجود جوا ال line edit طيب
text changed ايش بدي اعمل نفس ما عملنا في ال
bottom بدنا نروح نعمل dot ونقوله connect يعني لو
صار في text changed تاع ال line edit اتغير هيستدعي
ال method اللي موجود داخل ال connect يجب عشان نعمل
الآن ايش ضال علينا نعمل function عشان نستدعيها من
ال connect غير ال function اللي فوق هديك ل مين
هديك ل ال button صح؟ مش هديك ال method اللي فوق لل
button لما نعمل method تاني ل مين ل ال text فبأجي
فوق هنا و بعمل method تاني def مثلا input text
change it أنا ايش سميتها ال method طيب
أول حاجة خلينا قبل ما نروح نغير في ال label وعدد
ال characters وكذا نطبع رسالة صغيرة print hello بس
عشان نتأكد انه فعلا لو اتغير حجم النص print hello
المفروض انه كل ما اكتب اي character يروح يطبع ليه
مش غلط اللي موجود عندي محطة نهج و connect text
changed connect input text changed معناه لو صار
فيه تغيير في ال text هاستدعي input text changed
عشان اشوف الان التغيير لو انا كتبت اي حاجة هنا اي
حرف شايفين ايش بيصير حتى لو انا شلت حروف برضه
با طبع با طبعله اللي قال مش هذا اللي انا بديه اللي
بديه يجيبلي عدد .. عدد الأحرف ايش هو عدد الأحرف كيف
بجيبه؟ لأ بجيب النص الموجود جوا ال line edit صح
ولا؟ بجيب النص و بعدين جبت النص كيف بجيب عدد
الحروف اللي فيه؟
لأ كيف بجيب عندي نص، string، len، len صح ولا؟
يعني
طالما أن أنا هاي ال line edit واحد
قلت له text ايش عمل text؟ جاب النص، تمام؟ وهذا ال
text بحط برا هنا ايش؟ لن ال text أصلا عبارة عن ال
string تمام؟ هذا كله حطته جوا اللن هذا هيرجعني
متغير أنا بعمل متغير من عندي number of chars ايش هي
number of chars؟ عدد ال characters هذا number of
characters وين بدي أطبعه؟
لأ احنا اتفرج .. ما هو ويندش دي مظبوطش .. ليش؟
لأنه كل ما بدي اكتب character بدي يفتحلي نافذة ..
صح؟ لأ .. بدي أحطه في ال label .. مش في label
معمول عندي؟ تمام .. ايش اسم ال label؟ اسمه ال ..
واحد .. صح؟ dot set text مش في method في ال label
اسمها set text تمام بأعطيه number of characters بس
هاد بحط قبلها str بس
في السطرين هادو يعني
يا جماعة اللي هيصير التالي لو
تغير النص الموجود في line edit هيستدعي method
inputTextChanged ايش هيتغير النص؟ أي character
انضاف أي character انحدف هذا يعتبر تغيير في النص
معناه إن ال method هذا هيتم استدعاها عند كتابة أي
شيء طيب هيستدعي inputTextChanged inputTextChanged
ايش فيها؟ هيروح على طول يجيب النص الموجود في line
edit و يجيب ال len تبعه و يشوف عدد ال characters و
هذا يطبع ليها جوا ال label و مش بس بتطبع جوا ال
label هذا بتطبع كمان اشي زي هيك number of
characters يساوي
ايش عملت انا يا جماعة طبعت جملة بس جابت number of
characters يساوي الرقم هذا طب تعالى نشوف ايش الناتج
اللي بيطلع عندي تمام
لأن قاعد بغير في محتوى النص لأن نفس الشيء لو انا
حذفت characters طبعا
اي تغيير أي تغيير فيه بيستدعي ال method تاني تمام
حتى لو حذفته كله هيرجع صفر تعالوا
نشوف غيرهم الآن ايش في items تانية؟ في حاجة اسمها
ال combo box
كمبو بوكس كمبو بوكس كمبو بوكس كمبو بوكس كمبو بوكس
كمبو بوكس كمبو
بوكس كمبو بوكس
أيضا لديها class خاصة فيها لاحظوا أن كل box صار
تقريبا نفس النمط نسمي مثلا combobox cb1 هذا متغير
أنا بسمي الاسم اللي بدي اياه يساوي q هي combobox ايش
بدي امرر بين قصين؟ ايش بدي امرر بين قصين؟ ال
parent اللي هو w
طيب ال combo box ايش لازم يكون فيه items صح عناصر
موجودة فيه كيف بضيف العناصر اللي في CB1 فيها
method اسمها add item تمام add item و في add items
ماذا يفرق عن بعض؟ هذه بضيف عنصر عنصر وهنا بنضيف
مجموعة عناصر خلينا نجرب الاتنين item item واحد
يختار مثلا البلد مش بتطلع دائما عبارة عن drop list
اه هاي مثلا هنا بنقوله Palestine CB1
add item مثلا UK CB1 add لأن جربنا add item فبنضع
add items ايش add items هذي بتاخد list مجموعة على
طول يعني ممكن اجي جوا add items افتح list تمام و
اكتب العناصر اللي بديها مثلا كندا جوردان
و
هكذا بضيف العناصر اللي بديها طبعا هذه أسهل على
أساس بضيف اليهم كلهم مع بعض
طيب في حد اسمه set current index او set current
text لأن أنا أول ما يفتح البرنامج بدي يكون معلم
على دولة معين طبعا هو by default معلم على أول
واحدة إذا بدي أغير في عندي مثل اسمها set current
text ايش يعني current؟ الحالي يا إما current text
يا إما set current index
ماذا يفرق index عن text؟ index هو رقم العنصر،
يعني مثلا لو حطيت صفر، بختار أول واحد، تمام؟ واحد،
العنصر الثاني، واحد كذا، text بيحط العنصر نفسه،
مثلا بيقولوا هنا Egypt،
هنا كتابة index، هي text
تعالى نحدد مكانه CB1.set وممكن
نحدد إعداداته عشان تشوفوا بده احط style sheet ال
font size يساوي مثلا 16pt
طيب هي شايفينه؟ لو ضغط عليه هيطلع ليه الخيارات
طيب
بما ان انا عملت combo box برغم ال combo box زي
البطون ال event و ضروري جدا بدي اعرف انا ايش العنصر
اللي اختارته من ال combo box كيف
بنعمل event ده نفس الشيء بحط cp1 dot و بدي احدد ال
event اللي بدي اياه يتنفذ لو انا غلط .. ضغطت على
العنصر
مثلا من ضمن هذا البرنامج في عندي current index
changing ايش
ان ال current index changing من اسمها ان الرقم او
ال index الحالي تغير current index changing ال
index الحالي تغير بحطه الان لو هذا تغير ايش بده
اعمل
هو لحاله اول ما يتغير الاندكس او العنصر اللي
اختاره هي يعني current index changed current index
changed يعني اتغير ال answer اللي انا مختاره اول
ما يصير فيه تغيير في الاختيار لحاله هينفذ ال
method الموجودة بين مع ال connect زي ال button اول
ما ينضغط ال button، click بنفس الشيء اول ما يصير
فيه تغيير في الـ index اللي أنا مختاره، هي معناه
current index changed أنه اتغير، كان مثلاً أنا
مختار صفر، صرت مختار answer ثلاثة في الحالة هذه
استدعي لي method اسمه comboChanged، هذا طبعاً الـ
comboChanged لسه مش موجود، أنا بدي أعمله، فبعدين
بطلع فوق و
بنشأ function جديدة، Def comboChanged
طيب، إيش مفروض أو إيش بتتوقع أعمل جوا الـ comboChanged؟
أنه العنصر اللي أنا اخترته يطبع ليه، مثلاً برجع
لـ combo box نفسه اللي هو CB1 وبقوله عشان
أجيب العنصر الحالي اللي أنا مختاره، في عندي method
اسمه current text
وفي عندي current index، عشان ما لا أخطبش الآن في
method اسمها set current text و set current index
هانقولنا إيش عشان أغير الاختيار بتاع الـ combo، طبعاً
لكن في عندي method اسمه current text و current
index عشان أجيب العنصر اللي أنا حالياً اخترته، طبعاً
امتى هاقراه العنصر اللي اخترته؟ لما أغير الاختيار
تمام، فبيقوله current text أو current index، إيش
بيفرجوا عن بعض، current text بيجيب النص اللي أنا
اخترته، current index المكان اللي أنا اخترته
وبنميز بينها وبين current index changed، هذا ليه
بيستخدم current index changed هذا عشان أعمل الـ
event، تمام؟ يعني في عندي current index وفي عندي
current index وفي عندي current index changed، فاهم؟
ده إيش الفرق بينهم؟ طيب، الآن بدي أجيب الاتنين
current text، حط في متغير اسمه text، وبدي أعمل
متغير اسمه index، بدي أقوله CB1 وبدي أقوله current
index، جيبت الاتنين على أساس أقوله هنا M، أو خلينا
نتسخ من هنا، بدء ما احنا عملناه اللي هو الـ message
box، طيب
إيش هيصير الآن يا جماعة؟ مين يقول إيش الـ code ده
بعمل؟ هيفتح نافذة هيكتب فيها الناس تاع الأنصار
اللي أنا اخترته والـ index تبع الناس
تاع الأنصار اللي أنا اخترته والـ index تبع اللي هو
أنا اخترت أي أنصار من العناصر، طبعاً هاي بتبع ليه
ففعلياً بعرف الأنصار اللي اخترته بمجرد ما أغير
أغير الاختيار يا باشا
يا جماعة، طيب، ناخد كمان two items جدد وشبيهين في
بعض ومستخدمين كثير في البرامج اللي هم الـ check box
والـ ready button، عارفينهم، الـ checkbox والـ ready
button، أخدتهم في الـ HTML، الـ checkbox يستخدم لأكثر
من اختيار الـ ready button عشان يكونوا مجموعة و
نختار منهم واحد، تمام، نفس
الشيء، بنشوف كيف ننشط الـ checkbox، طيب بنعمل الـ
checkbox، عملت متغير وفي class برضه لـ checkbox
اسمها Q
الـ checkbox ونفس الشيء بحط هنا دبل اللي هو الـ
window، الـ checkbox إله نص بكون ظاهر جنبه، فبقول الـ
check box set
text مثلاً
خلاص، يعني الاختيارات مثلاً، وين نستخدم الـ checkbox؟
مثلاً اختار your courses، خلينا نقول هنا مثلاً python
هذا my course، ممكن نعمل أكثر من الـ checkbox يعني
دلوقتي نشوف إيش يا جماعة؟ مدام احنا عملنا الحاجات
اللي بده امحي أو أشيل عشان نرتب شغلنا، كل اللي
عملته قبل وخلي بس إيش الـ checkbox؟ طب هنا أنا عملت
check، بدي أعمل أكثر من الـ checkbox، هاي checkbox
python و
بنغير بس إيش أسماء المتغيرات، تمام؟ هاي checkbox
ثاني، هاي مثلاً هذه مادة image editing
وهاي check box ثالث web
development وهاي
رابعة introduction
to computers
طيب، تعال نشوف إيش هيصير لإن أنا قبعت .. شغلت
البرنامج، تمام؟ إيش اللي صار؟ إيش هذا اللي صار؟ مين
يقول ليه؟ كلهم حاطهم في نفس المكان، ليش؟ لإن أنا
محددت .. يعني أنا مجبطلوش .. محددتلوش مكانهم،
ففعلياً كلهم كوارهم في الزاوية، تمام؟ طب كيف ممكن
أن أكتبهم هدول؟
أول حاجة ممكن أعملها تشيك واحد، تقوله set style
sheet وأحكيله
أول حاجة font size، خلينا نكبر الحجم عشان تشوفوه
24pt، وهدول بدهم يكونوا
للكل
بس نغير الاسم
طيب، كيف نبعدهم مع بعض؟ بدنا كل واحد نعمله move
طبعاً؟ طيب، أنا بديش أعمل لكل واحد move، شوف إيش بدي
أسوي، وبدي حد يطلع على الـ code ويشوف أنا إيش
عملت
الآن هنا بعضهم عن بعض صح؟
طيب
كيف بعضهم عن بعض؟ تعالوا نشوف الـ code اللي أنا
عملته، إيش سويته يا جماعة؟ إيش هذا؟ حطيتهم كلهم في list
بعدين عملت for loop على الـ list، ليش؟ في خطوة .. في
خطوات بدي أعملها للكل، زي إيش؟ زي 6 style sheets
بدل ما أفعلها لكل واحدة، حطيتهم كلهم في list وعملت
for loop وقلت له لكل I روح أعمل 6 style sheets
بنفع ولا بنفعش؟ بنفع، لكن الـ text ما عملتش فيه هيك
لأن كل واحدة لها text مختلف
أنتوا معاه ولا لأ يا جماعة؟ طيب، بعدين قلت له move
move، حركها الـ X axis دائماً 100، لكن الـ Y value هذا
عبارة عن قيمة عرفتها فوق، قنقتها قد إيش؟ 100، يعني عند
أول واحدة هيكون 100، 100 وبعدين زيتها 40، بعد ما
زيتها 40 هيجي يكمل في الـ for loop، أخد الآنصر
الثاني، الـ check box الثاني
عشان ينزل تحت، وبعدين زاد الـ Y value ورجع الفرن 180، هذا أسهل ما أنا لكل واحد أقوله move وأقوله ده
حسب، تمام؟ فاهمين يا جماعة هذا؟
لأ، الـ ready button مختلف، لأن الـ ready button بختار
حاجة واحدة، هنشوف لسه الـ ready button طبعاً معانا
وجدا لسه طول المحاضرة، طيب
لسه لأن ما عملناش الـ action طبعاً
ما عملناش الـ action اللي بده يتم على الـ check box
طيب
كيف نعمل الـ action على الـ check box؟
بدي أجري الـ checkbox تبعي جوا الـ for loop أنا
المفروض أنه لكل واحد أعمل action صح؟ هذا جيت الـ
checkbox فيه مشكلة صغيرة، لكل واحد أعمل action
فاجيت قلت له تعال على الـ checkbox بدنا
نختار أول حاجة زي وزي الـ button وزي وزي الـ
combo box وزي وزي الـ line edit، نختار الـ event
اللي بده يصير عشان ينفذ الـ action، يعني إيش التغيير
اللي بده يصير في الـ line edit كنت أنا بكتب
characters في الـ battle كنت أضغط على الذرع في الـ
combo box بكون فيه اختيار في الـ current index
اختلاف في الـ current index، طب في الـ check box إن
يكون checked أو not checked، فحوا لا، ففي عندي
method اسمها
state، تغيرت حالة
selected، تغيرت حالة button، تغيرت في الحالة هذه، نفس
ما عملنا في button، نعمل connect
ونعمل الـ function، تمام؟ إيش نسميها مثلاً؟ مثلاً
checkBoxFunction
تمام؟
هذه اسم الـ function أنا بدي أعملها طيب،
بدنا نطلع فوق عشان أعمل الـ function هدول الآن بدنا
نشيلهم، صح؟ ال message و نشيلنا ال line edit و ال
combo
هي ديف checkbox function طيب
هنا بده يجيب ال checkbox اللي أنا ضغطت عليه صح؟
الآن يا جماعة في عندي أنا مشكلة هنا الآن أنا في ال
for loop هذه لكل ال checkboxes لو صار فيه أي تغيير
أو أي اختيار لأي checkbox هيستدعي نفس ال function
اللي هي مين checkbox function يعني أنا فعليًا كل
checkboxes ربطتهم في نفس ال function اللي هي اسمها
checkbox
function
هل هذا صح ولا غلط هو الأفضل... الأفضل أن يكون لكل
عنصر function خاصة فيه زي قبل شوية لل button احنا
عملنا function خاصة فيه لل checkbox function خاصة
فيه لل line edit برضه function خاصة فيه طب لما ال
checkbox هنا ممكن أنا أجي لكل واحد أعمل function
خاصة فيه كيف لكل واحد أعمل function خاصة فيه أنك
تجي فوق برا الفورموز تأتي للـ checkbox الأول تقول check1
.statechanged.connect
وتعمل function خاصة لل checkbox الأول تمام؟ لحظة
بس checkbox واحد
changed تمام؟ هذه مثلًا function أنا عملتها لمن؟
للأول تمام؟ هيك أنا فصلت و للتالت تعملوا method
باسم مختلف واضحة بس هذه غلبة ليش غلبة لأن كل واحد
بدي أعمله function افرض أن أنا عندي عشرة check
boxes بدي أعمل لكل واحد عشر... لكل واحد function
بس لأن عندي عشرة functions بس لأن لدي check boxes
طيب أنا حابب اختصر بدي أخليهم كلهم يتشاركوا في نفس
ال function بنفع ولا بنفعش بنفع بس هلاقي فيه مشكلة
ايش هي؟ تعالوا نكمل عشان نشوف وين المشكلة هتفهم
الآن ايش لازم أعمل؟ لازم أروح أعمل checkbox
function طيب أجيت هنا ل checkbox function طيب الآن
احنا مثلًا في ال button أو في ال line edit لما كنا
نضغط على line edit لما يتمثل ال function يجيب النص
اللي فيه يروح على ال ال ال ال ال ال ال ال ال ال ال
ال ال ال ال ال ال ال ال ال ال ال ال ال ال ال ال
طب الآن هذا الـ function هتتنفذ لو ضغطت على أي
checkbox طب على أي checkbox بدنا نروح عشان نعرف مين
اللي أنا اخترته؟ يعني الآن إذا انضغط هذا، إذا هذا
اتعلم، هيستدعي مين؟ الـ function إذا هذا اتعلم،
هيستدعي الـ function، جوا الـ function كيف بدي
أعرف مين اللي ناداني؟ هذا عاملين زي ايش؟ زي واحد ضايع
دهره وناس قاعدين هنا واحد منهم جال أحمد ضايع دهره
هيك يطلع ولا واحد راحت عليه مش عارف مين اللي جاله
أحمد تمام؟ كيف بدي أحدد؟ بدي أعرف مين اللي نادى
الشخص هذا أنا هنا بدي أعرف ال function checkbox
function تم استدعاؤها طب مين اللي استدعى ال
function هذه؟ لسه مش عارفين تمام؟ واضحة ولا
المشكلة موجودة؟ هذه غير لما... غير لما كل واحد
يكون له function مختلفة إذا كل واحد له function
مختلفة خلاص من ال function بتاعته بقوله روح على ال
check box واحد وهات ال... شوف حالته الآن هذه الـ
function أكتر من checkbox هيستدعيها طب مين ال
checkbox اللي استدعيها؟ أنا لسه مش عارف طب ايش
الحل؟ الحل أنه احنا نيجي بطريقة مع... بدنا نبعث
لما نعمل connect نستدعي ال function ونبعث مع ال
function parameter يدل مين ال checkbox اللي
استدعيها
واضحة ايش ال... ال... وين المشكلة موجودة؟ الآن ال
checkbox الأول والثالث والثالث والرابط استدعى
نفس ال function طب اشتغلت ال function كيف بدي
أعرف مين استدعيها؟ أنا مش معروف الحل أنه أنا من
خلال هنا checkbox نبعث قيمة تبين مين ال checkbox
اللي استدعى ال function للأسف بقدرش أجي هنا وأحط جثين
وأبعث مثلًا ال I ال I من... هي مين ال I؟ ال
checkbox أنا ما أقدرش أعمل هيك لأن هذا ما يدعمهاش لازم
تحط اسم ال function بدون أقواس طب ايش الحل؟ الحل
أنه بدنا نعمل الآن شيء زي هيك لحظة خليني أتذكرها
خليني أجرب عشان أتأكد
مش عارف كده
طيب انظروا معي يا جماعة اللي
يعني المشكلة اللي موجودة عندي أن أنا بستدعي اسم ال
function اللي هي checkBox
function
وبدي الآن عشان أحدد مين ال checkbox اللي أنا
اخترته أو استدعى ال function لما استدعى ال
function أبعث معاها قيمة فبروح لل function اللي
عندي اللي هي ال checkbox function وبحط فيها قيمة
متغير I مين هو ال I يمثل اللي هو ال checkbox يعني
بمعنى أنه لما استدعى ال function هذه المفروض يجي
معاها مين ال checkbox اللي استدعاه ليش؟ على أساس
أقعد هنا وأقول له print وأذهب للـ checkbox وأحط
للتكست منه الآن
هذا ال parameter اللي بتمرر لل function هو ال
checkbox نفسه إذا أتى ال checkbox نفسه جيب ال text
منه طيب
لسة في خطوة بنعملها الآن على أساس أقدر أبعث متغير
مع ال function بروح بعمل import ل library اسمها
function tools شايفينها هي functools import
functools اختصار ل function tools تمام ايش
فايدتها هذه ال function tools هي
import function tools
ايش فايدتها الـ function tools انزل تحت هنا
اللي أنا عندي ال checkbox state changed connect
هاي اسم ال function صح قبلها بكتب كلمة functools أو
functools
وبعدين كلمة partial
function tools وبكتب partial وبفتح قوسين
function
tools partial وبفتح قوس بكتب checkbox function
مين هي ال checkbox function؟ اللي هي ال method
اللي بدي استدعيها فاصلة I ايش يعني I؟ مين هو ال I؟
ال checkbox تعالوا نتبع ال for loop اللي موجود عندي
لكل checkbox موجود في ال list روح غير لي حجم الخط
تبعه روح حرك له روح اعمل له event عليه بحيث أن لو
انضغط ل checkbox I هيروح يستدعي ال function
checkbox function ويبعت معاها ال I يعني لو أنا
ضغطت على ال checkbox الأول هيستدعي ال checkbox
ويبعت معاها ال checkbox الأول لو ضغط على ال
checkbox الثاني هيستدعي ال checkbox function ويبعت
معاها ل checkbox الثاني يعني أنا فعليًا الآن لما
استدعي ال function بما أن كل ال functions بتشاركوا
في ال... كل ال checkbox بتشاركوا في ال function
هذه معناه أن أي تغيير على ال checkbox هيستدعي ال
function وهيبعت معاها ل checkbox نفسه أنا الـ
function بتقول لي أنا اسمع مدام أنا مشترك أكثر من ال
checkbox بدك تبلغني مين هو ال checkbox اللي نفذ ال
function واضح ليش عاملنا احنا الخطوة هذه؟
هذه الـ function tools ليش؟ لأنه في البداية احنا
كيف كنا نشتغل يا جماعة كنا نيجي هنا نقول connect
ونحط checkbox function مش هيك كنا شغالين احنا لأن
هذه الطريقة للأسف ما تمكننيش أن أبعث متغيرات لل
checkbox function الأهم مش ال checkbox function
بتاخد متغير اسمه I تمام؟ هيك هو بيستدعي ال
checkbox function بدون ما يبعت متغير كيف نبعث
متغير لل checkbox function؟ للأسف من خلال قسم
ما تقدرش تكتب I لأنه ببساطة هذا مش استدعاء لل
function أنا كأني بقول له إنه لو مضغوط نفذ ال
function هذه الحل الوحيد عشان نقدر نبعث parameter
أنه احنا نحط السطر هذا function tools partial و
بين القوسين بتحط اسم ال function فاصلة اسم المتغير
اللي بدك إياه ينبعت مع ال function اللي هو مين؟ I
بمجرد ما أضغط على checkbox هيستدعي ال function
checkbox function ويبعت معها الـ I لأن تم استدعاها
لل checkbox function كيف بتعرف مين استدعاها روحت لل
I وقلت له text اللي هو النص بتاع ال checkbox هذا
طبعته عملت له print تعالوا نعمل run نشوف النتيجة
المفروض
الناتج ينطبع هنا صح ولا لأ لأن اخترت image editing
هي طبعة ل image editing اخترت introduction to
computers هاي طبع ليها اخترت python هاي طبعه
شايفينها طب شيلت هذه برضه طبع ل image editing يعني
حتى لو يعني ليش عمل هيك؟ لأنه مكتوب أن ال state
changed ايش يعني ال state changed عند أي تغير في
الحالة طب أنا ما بديش عند أي تغير في الحالة بدي فقط
لما تكون معلمة يطبعها مش معلمة ما يطبعهاش تمام؟ ماذا
أفعل؟ بس باجي هنا في ال function أنه قبل ما تطبع
أتأكد أنه ايش؟ أن الـ I معلن فببدأ أقول له if I is I
.checked
يساوي true ما هو هذه ال check دي بترجع true أو
false أتأكد بس أن ال check موجودة
لأ مش checked خلينا نشوف لأ
هي is checked تمام is checked
if I is checked يساوي true أو ممكن حتى أشيل يساوي
true if هذه true تمام
الآن شيلت الاختيار ما طبعش تمام
يا جماعة اه خلاص