طيب و جماعة السلام عليكم هنكمل ان شاء الله محاضرة
عادى فى موضوع ال graphical user interface أو
التصميم الوجهات بدأنا المحاضرة الماضى أخدنا مقدم
على ال pyqtوشوفنا يا جماعة ان الـ PyQt فعليا كل
مكوّن من مكونات الـ GUI له class بتمثله يعني مثلا
ال window فيه class اسمها QWidget ال label له
class اسمها QLabel و هكذا كل item موجود في الشاشة
زي مثلا ال label زي مكان المربع الإدخالزي مثلا
drop list أو القائمة المنسدلة وغيره وغيره كل عنصر
من العناصر هذه له class تمثله في ال library بتاعة
ال pyqtاليوم ان شاء الله هنكمل هناخد بعض ال GUI
components الإضافية غير اللي أخدناها المحاضرة
الماضية المحاضرة الماضية أخدنا بس ال label و ال
pattern صح بدأنا في ال pattern المحاضرة الماضية
اللي هو بتمثل class اسمها QPush Pattern طيب خليها
الأن نبدأ نشتغل في برنامج بدأ اكتر من البداية طبعا
في الأول بعمل لل imports
تمام هذا ال import اللي بنعمله في البداية و بعدين
قولنا بنعمل متغير من نوع Q Application على أساس إن
هو المسؤول عن تشغيل نافذة بتاعتى و
في الآخر بعمله execute هنا الآن بين السطر الأول و
الأخير بكتب تصميم الواجهة بتاعتى لأن أول حاجة
قولنا بنعملها بنعمل window بعمل أي متغير و ليكن WQ
Widget لان
هذه بتعمل ال window لان بدي احدد اعدادات ال window
شوفنا المحاضرة الماضية بنعمل امور كتير مثلا set
window title وممكن
احدد حجم ال window وشوفنا كيف نحط ال window حجمها
جد حجم الشاشة تمام بعمل متغير من Q Desktopهذا
الوجد و هذا qDesktopWidget فيه method اسمه screen
هذا برجعه لمتغير و ليكن S مثلا لان بروح لل window
بتاعتي بقوله resize و بعطيله S dot بجيب ال width
من ال S و بجيب ال height من ال S كمان
بعد الاخر عادي عشان اظهر النافذة اس دوت شو طيب
هيشغل النافذة شفنا أمور تانية مثلا كيف نغير ال
icon بتاعة النافذة وهكذاكيف اغير اعدادات النافذة
باستخدام
style sheets و باستخدام CSS عادى اخذنا الان بعض ال
components اللي موجودة جوا ال window اللي بنحطها
جوا ال window مثلا ال label بنشأ متغير ال مثلا كيو
labelوعشان أحط ال label ده جوا ال window ببعد في
ال initializer تبعه في ال constructor ال parent
اللي هو ال W اللي هي ال window لأن باجب الخلال
الواحد في بعض ال methods اللي بقدر أغير فيها
أعدادته زي مثلا set text بحط النص الموجود في ال
label set text
الأن الإعدادات أسهل طريقة لتغييرها اللي هي set
style sheet وبصير أكتب style
sheet
و ممكن في الآخر اغير او احدد وان مكانه عن طريق
move او set geometry move مثلا خلينا نقوله في
المكان تلاتمية تلاتمية و
في الآخر بعمل show لل wind كله
لان هاي اللعب اللي حطه طب انا حطه اه غلطان في
white
طيب وشوفنا كمان كيف نحط في ال label صورة صح؟ ونغير
حجم الصورة كمان بعدين بدأنا في ال button قلنا عشان
نعمل button برضه في اند كلاس اسمه QPushButton
بننشئ منها object فبنعمل متغير اسمه button واحد
ونقوله QPushButton الان
شوفنا ال initializer بتاع ال QButton بياخدالـ
parent الـ w و بعدين بحدد اعدادات ال button بقوله
مثلا set text click
here مثلا و نفس ال label ممكن احدد اعدادات لل
button التنسيق طبعا button واحد برضه ست 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 اللي هو مثلا بتن بنعمل dot و بنحدد إيش
ال action الحدث اللي صارأو التغيير اللي صار في ال
button مثلا أنا عندي هنا في clicked مش click لأ في
إيش clicked clicked معناه ماله انضغط هذا فعل ماضي
clicked صح؟
طيب في مثل ال event تاني اسمه released، إيش هي
released؟ ال sub، تمام؟ يعني حتى ممكن مش بس أشغل
event أو function معينة لما البطن أضغط عليه، ممكن
كمان لو أنا أضغط عليه و سبتهينفذ فنكشن تاني فالان
انت بده يتنفذ الحدث اللي انا بدياه بحدده من خلال
ال object بضغط dot و بحدد ال action اللي بديها هنا
مثلا هو يعني ماعطيني اكتر من خيار في ال petrol
الخيار الشائع انه انا بده اضغط على ال petrol و بده
ينفذ شيء صح فهو اجيب ليه clicked هنا بختار clicked
طبعا بشوف القصير هدولةكلمة clicked طيب لما يصير
clicked ايش بده اعمل؟ بده اقوله اربطليا مع
function يعني بده اكون انا عامل function بحيث انه
لما يصير ال button clicked بده اشغل ال function
هذه كيف بده اربط ال button مع ال function في حالة
ال click؟ ده ال button بضغط clicked تمام و بعمل
dot و بقوله connectبين القصين بتاعة ال connect
بكتب اسم ال function اللي بديها هتتنفذ لما اعمل
click ال function هذه اين بكتبها بكتبها فوق اه
لازم عشان يعرف يعني احنا خلينا
نجرب عشان نتأكد هيدف مثلا بنسميها print message
تمام
بتقوله printبطون pressed هذا الرسالة اللي انا بده
اطبعها ان لو انضغط البطون هيطبعلي بطون 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 معين إيش هي اسمها Q message boxQ
Message Box من اسمها ايش يعني Message Box صندوق
لرسالة تمام طيب هى النافذة الصغيرة بتطلع فيها
رسالة بتسميها Message Box انا عشان اطلع رسالة بدي
اعمل متغير من Q Message Box بعمل متغير وانيا اكون
اسمه M يساوى Q Message Box بفتحقصيدة وعشان تنعرض
ال message دي داخل النافذة الأساسية اللي هي من
النافذة الأساسية W صح بحط هنا W طيب
ال message دي أنا أنشأتها الآن بدي أحط داخلها
message بدي أحط داخلها نص و title مين بتحكم فيه
أنا كمبرمج بدي أقول له داخل ال M دي قدر أعمل dot
وفيه برضه مثل اسمها set textأيش بدك تكتب هنا مثلا
button pressed
طيب
ممكن كمان أقوله M set window title هدى set window
title لمين؟ للمسج، تمام؟ أنا بغير عنوان المسج
طيب و في الآخر عشان أعرض ال message بقول له m.exec
execute مش ال window الكبيرة لما بقول في ال
application بقول execute ال window برضه بقوله
execute لأن هذا كل ال code إيه انت هيتنفذ لما
تتنفذ ال print message إيه تتنفذ ال print message
لما أضغط على البطة طبعا تعالوا نجرب ال code هذا
طبعا
هاي ال message طلت عنده هنا
طيب ممكن كمان اجري ال message اقول له الست detail
text ايش هذا detail text تفاصيل تمام this is a
useless message ايش هذه التفاصيل و انا بتنعرض
تعالى نشوفعندما تقوم بالضغط على البطون، سيظهر لك
تفاصيل التفاصيل الموجودة في البطون
طيب، ابغط على الـ button يغير النص اللي في ال
label بقدر أعملها و أنا لأ ابغط على ال button أغير
النص اللي في ال label فلان نفس الحاجة بقوله
connect و نفذ ال method لأن في ال method هذه بغير
ال code اللي هنا بدل من يطبع ليه في message
الان انا بدى اروح لمين؟ لل label اللى هو إيش ال ..
الواحد و بقوله set text و بكتب button pressed
هذا الكلاب وين هينكتب؟ جوا ال label متى؟ لما ينضغط
على ال button طيب
لإن ضغط على ال button هيغيرنا المحتوىالنص تمام و
ممكن كمان اجي هنا اضيف سطر احكيله الواحد dot
adjust size ايش يعني كلمة adjust adjust يعني عدل
او اطبط تمام بمعنى ان افرض النص اللي انا حاطيته
هنا كان كبير شوية مثلا تعالى نشوفها كده اش هيصيرها
لان
النص كبير جدا لو انا مش حاطط adjust size نص الكلام
مش هيبين لانه كان حجم النص على جد النص السابق لما
اتغير النص ماعدلش حجم ال label عشان يجعل جد حجم
النص اللي فيه ف adjust size بتخلي حجم النص يتلاقم
حجم ال label يتلاقم حجم النص اللي فيه يعني انا لو
انا عملت runوبغط على click here شايفين صغر لأن حجم
النص هنا صغير طيب هذا بالنسبة لل button شوفنا كيف
ننشأ button وكيف لما نضغط على button ننفذ action
معين طيب نشوف item تاني كل الآن المحاضرة هتكون
عبارة عن items نخلص واحد و ندخل في التاني و تقريبا
كلهم استخدامهم نفس الطريقة بس الواحد يتعلمالـ
methods المهمة الموجودة لكل item خلّيني أشوف أيضًا
item تاني شائع في نفس ال class اللي هو المربع
الإدخال لأن أنا في البرامج بدي أعمل مربع عشان أدخل
فيه مثلًا username password نص معين تمام؟ إيش هو
هذا؟ الواحد
فى class اسمها new edit
queue line edit ده
ساميها LE1 line edit لأن أنا عملت object من ال
class اسمهاأيش اسمها؟ line edit من اسمها ايش يعني
line edit؟ edit يعني معناها ممكن اعدل عليه line
معناها ان هذا عبارة عن سطر واحد مش multiline
المربعات الاتخال في منها نوعين في single line وفي
multiline single line يعني بيكون سطر واحد
multiline معناها ممكن زي text area هذا ال Q line
edit فقط سطر واحد
طيب الان 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
message boxليش عملت message box؟ ليش عملت message
box؟ عشان أقرأ بالنص sit text 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، limb، limb صح ولا؟
يعني
طالما أن أنا هاي ال line edit واحد
قلت له text ايش عمل text؟ جاب النص، تمام؟ وهذا ال
text بحط برا هنا إيش؟ لن ال text أصلا عبارة عن ال
string تمام؟ هذا كله حطته جوا اللن هذا هيرجعني
متغير أنا بعمل متغير من عندي number of cars إيش هي
number of cars؟ عدد ال characters هذا number of
characters وين بدى أطبعه؟
لأ احنا اتفرج .. ما هو ويندش دي مظبوطش .. ليش؟
لأنه كل ما بدي أكتب character بدي يفتحلي نافذة ..
صح؟ لأ .. بدي أحطه في ال label .. مش في label
معمول عندي؟ تمام .. إيش اسم ال label؟ اسمه ال ..
واحد .. صح؟ Dotset text مش في method في ال label
اسمها set text تمام بأعطيه number of characters بس
هاد بحط قبلها str بس
في السطرين هادو يعني
يا جماعة اللي هيصير التالي لو
تغير النصالموجود في line edit هيستدعي method
inputTextChanged إيش هيتغير النص؟ أي character
انضاف أي character انحدف هذا يعتبر تغيير في النص
معناه إن ال method هذا هيتم استدعاها عند كتابة أي
شيء طيب هيستدعي inputTextChanged inputTextChanged
إيش فيها؟ هيروح على طول يجيب النص الموجود في line
editو يجيب ال link تبعه و يشوف عدد ال 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.MOV وممكن
نحدد الإعدادته عشان تشوفوا بده أحط 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
طيب ايش مفروض او ايش بتتوقع اعمل جوا الكمبو تشانجد
انه العنصر اللي انا اخترته يطبع ليه مثلا برجع
لكمبو بوكس نفسه اللي هو 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تمام يعني في عندي 6 current index وفي عندي
current index وفي عندي current index exchange فاهم
ده إيش الفرق بينهم طيب الآن بدي أجيب الاتنين
current text حط في متغير اسمه text و بدي أعمل
متغير اسمه index بدي أقوله CB1 و بدي أقوله current
index جيبت الاتنين على أساس أقوله هنا Mأو خلّينا
نتسخ من هنا بدء ما احنا عملناه اللي هو ال message
box طيب
إيش هيصير الأن يا جماعة؟ مين يقول إيش الكودة ده
بعمل؟هيفتح نافذة هيكتب لفيها الناس تاع الأنصار
اللي انا اخترته و ال index تبع الناس
تاع الأنصار اللي انا اخترته و ال index تبع اللي هو
انا اخترت أي أنصار من العناصر طبعا هاي بتبع ليه
ففعليا باعرف الأنصار اللي اخترته بمجرد ما اغير
اغير الاختيار باشا
يا جماعة طيب ناخد كمان two items جدد وشبيهين في
بعض ومستخدمين كتير في البرامج اللي هم ال check box
و ال ready button عرفينهم ال checkbox و ال ready
button أخدتهم في ال HTML ال checkbox يستخدم لأكتر
من اختيار ال ready button عشان يكونوا مجموعة و
نختار منهم واحد تمام نفس
الشيء بنشوف كيف ننشط ال checkbox طيب بنعمل ال
checkbox اعملت متغير و في class برضه ل checkbox
اسمها Q
الشيك بوكس و نفس الشيء بحط هنا دابلي اللي هو ال
window ال check box إله نص بكون فعر جنبه فبقول ال
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 تغيرت حالة
select تغيرت حالة 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 صح قبلها بكتب كلمة function أو
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 تمام
الان شيلت الاختيار ما طبعش تمام
يا جماعة اه خلاص