التنبيهات Note والتساؤلاتQuery في PyS60
بسم الله الرحمن الرحيم
اليوم سأتحدث عن التنبيهات(الملاحظات) والتساؤلات بإستخدام مكتبات(وحدات) قياسية مدعما كتاباتي بالأمثلة والصور.
التساؤلات
تحوي الوحدة appuifw عدة دوال تؤمن تساؤلات بخيارات أو تطلب مدخلات من المستخدم، سأمر عليها تباعا.
*. الدالة query ، صيغتها كالتالي:
query(label, type[, initial_value])
العنوان label : هو العنوان الذي سيظهر في التساؤل.النوع type : يحدد نوع التساؤل، سنمر عليها تباعا.
[إختياري] القيمة البدئية initial_value : هي القيمة التي تحددها أنت وتظهر في حقل الإدخال ، تكون بحسب نوع التساؤل.
- يمكن لنوع التساؤل أن يكون أي من هذه السلاسل النصية [type]:
'text', 'code', 'number', 'date', 'time', 'query', 'float'
- نوع القيمة الإختيارية والدخل المعاد(بضم الميم) يعتمد على الجدلية: type، فمثلا:
-> للحقول النصية ('text', 'code') فإنه Unicode "وحيد الرمز"
-> للحقول العددية، إنه رقم
-> لحقول التاريخ والوقت ('date', 'time')، إنه ثوان منذ "الأزل" epoch مقرب لأقرب أدنى منتصف ليل محلي. [الأزل: 1970-يناير(1)-1 الساعة 12:00 ص]
-> حقول لا تأخذ قيمة بدئية التساؤل 'query' والوقت 'time' وتعودان على التوالي، بقيمة منطقية True/None وبثوان منذ منتصف الليل المحلي.
-> للحقول العشرية 'float' فإن تنصيب قيمة بدئية ليس له أي تأثير.
-> كل الحقول تعود ب None إذا ألغى المستخدم الحوار.
حسنا، كفانا كلاما ولنرى شيئًا عمليًا.
جلب الدالة query من الوحدة القياسية للواجهة الرسومية في PyS60
الآن أصبحنا جاهزين لتجربتها، فلنقم بذلك..
Image1: query-OK-Cancel.jpg
الحصول على مدخلات من لوحة المفاتيح...
Image3: query-text.jpg
Image4: query-number.jpg
Image5: query-float.jpg
Image6: query-time.jpg
Image7: query-date.jpg
لم ننته بعد ففي جعبتي الكثير، فماذا لو رغبنا بطلب مدخلين دفعة واحدة من المستخدم!
*. الدالة multi_query ، صيغتها كالتالي:
multi_query(label_1, label_2)
تقدم مربع حوار بحقلي إدخال نصيين(Unicode) ، تعود بصف tuple يحوي القيمتين المدخلتين وبـ None إذا ألغى المستخدم مربع الحوار.- لا يوجد قيم إفتراضية للحقول.
Image8: multi_query.jpg
ماذا إن أردت أن أظهر تساؤلا بغير الأشكال السابقة، ماذا إن تأخر المستخدم بالرد عن تساؤلي ، ماذا وماذا..... الحل تجده في الوحدة القياسية globalui قبل البدء لم لا نبدأ بلمحة موجزة عنها:
تؤمن الوحدة globalui تنبيهات وتساؤلات تظهر في واجهة مستخدم سلسلة ٦٠ العالمية (S60 global UI) ؛ تفيد في حالة التطبيقات التي ليس لها واجهة مستخدم رسومية.
*. الدالة global_query ، صيغتها كالتالي:
global_query(query_text[, timeout])
تعرض تأكيد عام (نعم/لا) ذي النص query_text (Unicode). تعود ب 1 إذا ضغط المستخدم 'نعم' و ب 0 عكس ذلك. إذا لم يستجب المستخدم للتساؤل خلال ثوان المهلة timeout فستعود ب None . إذا كانت ثوان المهلة صفر (وهي القيمة الإفتراضية/التفضيلية) فسينتظر التساؤل حتما من أجل دخل المستخدم.يجب أن تكون قيمة وقت المهلة عددا صحيحا/طبيعيا.
Image9: global_query.jpg
*. الدالة global_msg_query ، صيغتها كالتالي:
global_msg_query(query_text, header_text[, timeout])
تعرض رسالة عالمية ذات النص query_text (Unicode) وتحمل العنوان header_text. تعود ب 1 إذا ضغط المستخدم 'موافق' و ب 0 عكس ذلك. إذا لم يستجب المستخدم للتساؤل خلال ثوان المهلة timeout فستعود ب None . إذا كانت ثوان المهلة صفر (وهي القيمة الإفتراضية/التفضيلية) فسينتظر التساؤل حتما من أجل دخل المستخدم.يجب أن تكون قيمة وقت المهلة عددا صحيحا/طبيعيا.
Image10: global_msg_query.jpg
التنبيهات
إسمها يدل على ما تقوم به، فليس هدفها سؤال المستخدم أو طلب مدخل منه.. سنرى ما تقوم به من خلال قرائتنا.
*. الوحدة appuifw تحوي الدالة note ، صيغتها كالتالي:
note(text[, type[, global]])
تعرض تنبيه يظهر النص text(Unicode) وبحسب النوع type المختار يتغير الشكل. يمكن لقيمة النوع type أن تكون أحد السلاسل النصية التالية:
'error', 'info'(الإفتراضية), 'conf'.
إذا لم يحدد النوع فإنه ينصب: 'info'.إذا كانت قيمة global(عدد صحيح/طبيعي) أي عدد عدا الصفر فإن تنبيها عالميا سيعرض؛ التنبيه العالمي يعرض حتى لو طلبت الدالة في الخلفية.
الأمثلة التالية تظهر إستخدام الدالة:
Image11: note-info-Non global.jpg
Image12: note-error-global.jpg
Image13: note-conf-global.jpg
*. الوحدة globalui توفر الدالة global_note ، صيغتها كالتالي:
global_note(note_text[, type])
حيث تقوم بنفس مهمة الشكل العالمي من الدالة note الموجودة في الوحدة appuifw، التي صيغتها العامة كالتالي:
note(text[, type[, 1]])
لكن مع توفر خيارات أوسع من ناحية النوع type.- خيارات النوع المتاحة هي:
'info'(الإفتراضية), 'error', 'text', 'warn', 'charging', 'wait', 'perm', 'not_charging', 'battery_full', 'battery_low', 'recharge_battery', 'confirm'.
الأنواع: info, error, confirm تظهر ذات الأشكال المتوفرة في الدالة note الموجودة في الوحدة appuifw. لذلك سأضع أمثلة عن الأشكال الجديدة..
Image14: global_note-text.jpg
Image15: global_note-warn.jpg
Image16: global_note-charging.jpg
Image17: global_note-not charging.jpg
Image18: global_note-battery low.jpg
Image19: global_note-recharge battery.jpg
Image20: global_note-battery full.jpg
Image21: global_note-wait.jpg
Image22: global_note-confirm.jpg
Image23: global_note-perm.jpg
*. قد تضطر لعرض رسالة طويلة للمستخدم وتنتظر منه ردا مناسبا، في هذه الحالة الوحدة msgquery "رسالة تساؤل" ستفي بالغرض.
- تحوي الوحدة دالة وحيدة infopopup() لها عدة أعلام flags سنتطرق لها تباعا.. صيغتها كالتالي:
infopopup(message, title, flag)
كما ترى فكل الجدليات arguments إجبارية.الرسالة message : هي الرسالة التي ستعرض للمستخدم داخل التساؤل.
العنوان title : هو عنوان الرسالة، سيظهر فوقها.
العلم flag : سيحدد الخيارات المتاحة للمستخدم للرد بشكل ملائم.
الأعلام المتاحة هي:
'LYesRNo', 'OKRBack', 'OKRCancel', 'OKREmpty', 'RBack', 'RCancel', 'RClose'
سأعرضها الآن فتابع معي:(ستعرض الأعلام تبعا للخيارات المرتبطة بأحداث الزر الأملس soft الأيمن والأيسر)
١) الأيسر: نعم ، الأيمن: لا - LYesRNo
Image24: msgquery-yes-no.jpg
٢) الأيسر: موافق ، الأيمن: رجوع - OKRBack
Image25: msgquery-ok-back.jpg
٣) الأيسر: موافق ، الأيمن: إلغاء - OKRCancel
Image26: msgquery-ok-cancel.jpg
٤) الأيسر: موافق ، الأيمن: فارغ - OKREmpty
Image27: msgquery-ok.jpg
٥) الأيسر: فارغ ، الأيمن: رجوع - RBack
٦) الأيسر: فارغ ، الأيمن: إلغاء - RCancel
Image29: msgquery-cancel.jpg
٧) الأيسر: فارغ ، الأيمن: إغلاق - RClose
Image30: msgquery-close.jpg
*. آخر ما سأتحدث عنه، تنبيه من نوع مختلف بإستخدام الوحدة TopWindow لكن إعتبر التالي كمثال ولا تحصر تفكيرك بما يمكنك القيام به فيها *حرر تفكيرك* ، وحدة Note تقدم الصنف note الذي يمكن إستخدامه لعرض تنبيهات تظهر فوق كل واجهات جهازك فهو كإسم الوحدة المستخدمة في شفرته المصدرية: TopWindow(النافذة العُلوية(بضم العين))، سأشرح كيفية إستخدامها من خلال المثال التالي:
Image31: Note-1.jpg
Image32: Note-2.jpg
Image33: Note-3.jpg
Image34: Note-4.jpg
الشفرات المصدرية للوحدة Note إذا أردت الإطلاع والإستفادة منها:
File: Note.py
أتممت هذا الشرح بفضل من الله عز وجل، والسلام عليكم ورحمة الله وبركاته.
إذا كانت لديك أي ملاحظة أو إستفسار أو تحسين مقترح أو فكرة غفلت عنها .. رجاء أكتب ذلك في حقل التعليق أدناه دون تردد.
شكرا جزيلا على شرحك الواضح.
ردحذف