التنبيهات Note والتساؤلات Query في PyS60

التنبيهات 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

الحصول على مدخلات من لوحة المفاتيح...


Image2: query-code.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

Image28: msgquery-back.jpg

٦) الأيسر: فارغ ، الأيمن: إلغاء - 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


أتممت هذا الشرح بفضل من الله عز وجل، والسلام عليكم ورحمة الله وبركاته.
إذا كانت لديك أي ملاحظة أو إستفسار أو تحسين مقترح أو فكرة غفلت عنها .. رجاء أكتب ذلك في حقل التعليق أدناه دون تردد.

هناك تعليق واحد: