كيفية إضافة واجهة المستخدم الرسومية إلى البرامج النصية لـ Linux Shell

نشرت: 2022-01-29

يتم إطلاق نافذة معلومات zenity من محطة Ubuntu.

يمكنك استخدام نوافذ واجهة المستخدم الرسومية وشرائح التمرير وأزرار الاختيار وأشرطة التقدم والمزيد في نصوص Bash النصية. تعرف على كيفية استخدام مجموعة أدوات zenity على نصوص Bash النصية الخاصة بك. سنوضح لك كيف.

تعد Bash scripting لغة برمجة قوية ، ولأنها مدمجة في Bash shell ، فهي متاحة بسهولة للجميع. إنها لغة سهلة لبدء البرمجة. ولأنها مفسرة ، لا تحتاج إلى تجميع البرامج النصية الخاصة بك. بمجرد تحرير ملف البرنامج النصي وجعله قابلاً للتنفيذ ، يمكنك تشغيله. هذا يجعل دورة الترميز والتشغيل والتصحيح فعالة للغاية.

هناك شكوتان رئيسيتان لدى الأشخاص بشأن نصوص Bash ، الأولى هي السرعة. نظرًا لأن Bash shell يفسر الأوامر الموجودة في البرنامج النصي ، فإنها لا تنفذ بالسرعة التي يتم بها تنفيذ التعليمات البرمجية المجمعة. ومع ذلك ، فإن هذا يشبه الشكوى من أن الجرار ليس بنفس سرعة السيارة ؛ هم مخصصون لأشياء مختلفة.

هناك نوعان من السرعة. يمكنك غالبًا تجميع نص سريع واستخدامه لأداء مهمة بسرعة أكبر بكثير من تطوير حل بلغة مترجمة ، مثل C.

الشكوى الثانية لدى الأشخاص مع البرامج النصية Bash هي واجهة المستخدم - إنها نافذة طرفية. بالطبع ، لا تهم الواجهة أحيانًا. إذا كان الشخص الوحيد الذي سيستخدم البرنامج النصي هو مؤلفه ، فمن المحتمل ألا تكون الواجهة بهذه الأهمية. ولا يهم أيضًا البرامج النصية التي تقوم بمعالجة الخلفية ونوع الدُفعات. عادةً ، لا تحتاج مثل هذه البرامج النصية إلى الكثير من تفاعل المستخدم (إن وجد).

الإعلانات

هناك مناسبات تحتاج فيها إلى شيء أكثر سهولة وحداثة من النافذة الطرفية. معظم الناس معتادون على واجهة المستخدم الرسومية (GUI). لمنح الأشخاص تجربة خالية من الاحتكاك قدر الإمكان ، عليك إنشاء عناصر واجهة المستخدم الرسومية واستخدامها من البرامج النصية الخاصة بك.

تطبيق zenity

يسمح لك zenity بدمج مجموعة كبيرة من عناصر الواجهة الرسومية في نصوص Bash النصية. إنها مجموعة أدوات قوية تضفي على نصوصك إحساسًا عصريًا ومظهرًا معاصرًا ومألوفًا.

تم تثبيت zenity مسبقًا على توزيعات Ubuntu و Fedora و Manjaro. إنه جزء من جنوم. إذا كنت تستخدم KDE ، فقد ترغب في التحقق من kdialog بدلاً من ذلك ، على الرغم من أن zenity يعمل على أي بيئة سطح مكتب.

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

ننتهي من تطبيق صغير يستخدم جميع أنواع نوافذ الحوار الثلاثة.

نافذة حوار التقويم

تسمح نافذة حوار التقويم لشخص ما بتحديد تاريخ. لإنشاء واحدة zenity يتطلب أمرًا واحدًا من كلمتين:

 روعة - التقويم 
الإعلانات

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

نافذة تقويم zenity لشهر يوليو 2019.

انقر فوق "موافق" لإغلاق نافذة الحوار وتحديد التاريخ المميز. النقر المزدوج فوق التاريخ يفعل نفس الشيء.

إذا كنت لا تريد تحديد تاريخ ، فانقر فوق "إلغاء" ، أو اضغط على مفتاح "Esc" في لوحة المفاتيح ، أو أغلق نافذة الحوار.

نافذة تقويم zenity مع تحديد 19 أغسطس 2019.

في المثال أعلاه ، تم تحديد 19 أغسطس 2019. إذا نقر المستخدم على "موافق" ، يتم إغلاق التقويم ، ويتم طباعة التاريخ المحدد في نافذة المحطة.

التاريخ المحدد في التقويم (08/19/2019) الموضح في نافذة المحطة.

يمكنك تجاهل السطر ، "GTKDialog تم تعيينه بدون أصل عابر. هذا محبط ".

GTK تعني GIMP Tool Kit ، وهي مجموعة الأدوات المستخدمة لتطوير واجهة جنوم. تم تصميمه في الأصل من قبل مؤلفي برنامج معالجة الصور GNU (GIMP). يرمز GNU إلى GNU's Not Unix.

الإعلانات

يحذر محرك zenity المؤلفين من أنهم استخدموا مكون GTK بطريقة غير قياسية.

الحصول على قيمة التاريخ

طباعة التاريخ على المحطة لا تفعل الكثير بالنسبة لنا. إذا أردنا استدعاء هذا التقويم من أحد البرامج النصية الخاصة بنا ، فنحن بحاجة إلى التقاط قيمة التاريخ المحددة حتى نتمكن من القيام بشيء مفيد معها في البرنامج النصي الخاص بنا. سنقوم أيضًا بتخصيص التقويم قليلاً.

سنستخدم الخيارات التالية مع التقويم. يجب استخدامها جميعًا مع علامة "-" المزدوجة:

  • - نص : يحدد سلسلة نصية لعرضها في التقويم. إنه يحل محل الخيار الافتراضي ، "حدد تاريخًا من أدناه".
  • - العنوان : يضبط عنوان نافذة حوار التقويم.
  • –day : يضبط اليوم الذي يتم تحديده عند فتح التقويم.
  • - شهر : يضبط الشهر الذي يتم تحديده عند فتح التقويم.
  • - عام : يضبط السنة التي تم تحديدها عند فتح التقويم.

نحن نستخدم متغيرًا يسمى ChosenDate لالتقاط التاريخ الذي يتم إرجاعه من التقويم. ونحن نستخدم echo $ChosenDate لطباعة ذلك التاريخ في نافذة المحطة.

نعم ، لقد حققنا نفس النتيجة في المثال السابق ، ولكن هنا ، لدينا التاريخ المحدد المخزن في متغير. في المثال السابق تمت طباعته ونسيانه.

 ChosenDate = $ (zenity - تقويم - نص "اختر تاريخًا" - العنوان "How-To Geek Rota" - اليوم الأول - الشهر التاسع - عام 2019) ؛ صدى $ ChosenDate 

الآن ، يعرض التقويم موجهنا وعنوان نافذتنا. يتم تعيين التاريخ على تاريخ البدء الذي اخترناه بدلاً من تاريخ اليوم.

تقويم zenity مع تحديد تاريخ البدء (1 سبتمبر 2019).

الإعلانات

يمكننا أيضًا تخصيص تنسيق سلسلة التاريخ التي يتم إرجاعها عند إجراء التحديد. يجب أن يتبع خيار --date-format format محدد تنسيق. هذه سلسلة من الرموز المميزة التي تحدد البيانات والتنسيقات التي سيتم تضمينها في الإخراج. الرموز المميزة هي نفسها المستخدمة مع وظيفة لغة strftime() C وهناك مجموعة كبيرة منها.

الرموز التي نستخدمها هي:

  • ٪ أ : الاسم الكامل ليوم الأسبوع.
  • ٪ d : يوم الشهر كرقم.
  • ٪ m : الشهر كرقم.
  • ٪ y : السنة كرقمين (بدون قرن).
 ChosenDate = $ (zenity - تقويم - نص "اختر تاريخًا" - العنوان "How-To Geek Rota" - تنسيق التاريخ = "٪ A٪ d /٪ m /٪ y" - اليوم الأول - الشهر التاسع - عام 2019) ؛ صدى $ ChosenDate 

شخص ما يختار التاريخ:

نافذة تقويم zenity مع تحديد 16 سبتمبر 2019.

ويتم إرجاع التاريخ باستخدام التنسيق الخاص بنا. يعرض اسم يوم الأسبوع ، متبوعًا بالتاريخ بالترتيب الأوروبي: اليوم والشهر والسنة.

نافذة حوار تحديد الملف: اختيار ملف

نوافذ حوار اختيار الملفات معقدة للغاية. يمكن للأشخاص تصفح نظام الملفات ، وتمييز ملف أو ملفات ، ثم النقر فوق "موافق" لتحديد تلك الملفات أو إلغاء التحديد تمامًا.

يوفر zenity كل هذه الوظائف والمزيد. وهي سهلة الاستخدام مثل نافذة حوار التقويم.

الخيارات الجديدة التي سنستخدمها هي:

  • - اختيار الملف: يخبرنا عن zenity في استخدام نافذة حوار اختيار ملف.
  • - متعدد : يسمح لشخص ما بتحديد أكثر من ملف.
  • –مرشح الملفات: يخبر نافذة حوار الملفات بأنواع الملفات المراد عرضها.
 zenity - تحديد الملف - مربع "How-To Geek" - متعدد - مرشح الملفات = '*. mm * .png * .page * .sh * .txt' 

تعد نافذة حوار تحديد الملف وظيفية مثل أي نافذة أخرى لاختيار الملفات.

نافذة حوار قسم ملف zenity مع تحديد المجلد.

يمكن للمستخدم تصفح نظام الملفات واختيار الملف الذي تختاره.

نافذة حوار اختيار ملف zenity مع تحديد ملف

الإعلانات

لقد تصفحنا إلى دليل جديد وحددنا ملفًا يسمى "button_hybrid.png".

عند النقر فوق "موافق" ، يتم إغلاق نافذة حوار تحديد الملف ، ويتم طباعة اسم الملف والمسار في النافذة الطرفية.

إذا كنت بحاجة إلى استخدام اسم الملف في أي معالجة أخرى ، فيمكنك التقاطه في متغير ، تمامًا كما فعلت مع التاريخ من التقويم.

نافذة حوار تحديد الملف: حفظ ملف

إذا أضفنا خيارًا واحدًا ، فيمكننا تحويل نافذة حوار تحديد الملف إلى نافذة حوار حفظ الملف. الخيار - --save . سنستخدم أيضًا خيار --confirm-overwrite . هذا يطالب الشخص بتأكيد رغبته في الكتابة فوق ملف موجود.

 الاستجابة = $ (zenity - file-select - save --confirm-overwrite) ؛ صدى $ Response 

تظهر نافذة حوار حفظ الملف. لاحظ أن هناك حقل نصي حيث يمكن لأي شخص كتابة اسم ملف.

zenity ملف حفظ نافذة الحوار.

يمكن للمستخدم استعراض الموقع الذي يختاره داخل نظام الملفات ، أو توفير اسم للملف ، أو النقر فوق ملف موجود للكتابة فوقه.

مربع حوار حفظ ملف zenity مع تحديد ملف موجود.

الإعلانات

في المثال أعلاه ، قام المستخدم بتمييز ملف موجود.

عندما ينقر على "موافق" ، تظهر نافذة حوار تأكيد تطلب منه تأكيد رغبته في استبدال الملف الحالي. لاحظ أن اسم الملف يظهر في مربع حوار التحذير. هذا هو نوع الاهتمام بالتفاصيل الذي يمنح zenity مظهرها الاحترافي.

إذا لم نستخدم الخيار --confirm-overwrite ، فسيتم استبدال الملف بصمت.

zenity الكتابة فوق حوار التأكيد.

يتم تخزين اسم الملف في المتغير Response ، والذي يطبع في نافذة المحطة الطرفية.

ويندوز حوار الإخطار

مع zenity ، بما في ذلك نوافذ حوار الإعلام البقعة في البرامج النصية الخاصة بك ، فهي سهلة. توجد نوافذ حوار للمخزون يمكنك الاتصال بها لتوفير المعلومات والتحذيرات ورسائل الخطأ والأسئلة للمستخدم.

لإنشاء نافذة حوار رسالة خطأ ، استخدم الأمر التالي:

 zenity - error --width 300 --text "تم رفض الإذن. لا يمكن الكتابة إلى الملف."

الخيارات الجديدة التي نستخدمها هي:

  • - خطأ : يخبرنا عن zenity أننا نريد استخدام نافذة حوار خطأ.
  • - العرض : يضبط العرض الأولي للنافذة.

الإعلانات

تظهر نافذة حوار الخطأ بالعرض المحدد. يستخدم رمز خطأ GTK القياسي.

نافذة حوار خطأ zenity.

لإنشاء نافذة حوار معلومات ، استخدم الأمر التالي:

 zenity --info --width 300 - نص "اكتمل التحديث. انقر فوق" موافق "للمتابعة.

الخيار الجديد الذي نستخدمه هو --info ، والذي يخبر zenity بإنشاء نافذة حوار معلومات.

نافذة حوار معلومات zenity.

لإنشاء نافذة حوار سؤال ، استخدم الأمر التالي:

 zenity - سؤال - عرض 300 - نص "هل أنت سعيد بالمتابعة؟" ؛ صدى $؟

الخيار الجديد الذي نستخدمه هو --question ، الذي يخبر zenity لإنشاء نافذة حوار للأسئلة.

$? هي معلمة خاصة. يحتفظ بقيمة الإرجاع من أحدث خط أنابيب تم تنفيذه مؤخرًا. بشكل عام ، هذه هي القيمة من أحدث عملية تم إغلاقها. تعني القيمة الصفرية "حسنًا" ، وتعني القيمة بواحد أو أكثر "إلغاء".

الإعلانات

هذه تقنية عامة يمكنك تطبيقها على أي من نوافذ حوار zenity . بالتحقق من هذه القيمة في البرنامج النصي الخاص بك ، يمكنك تحديد ما إذا كان يجب معالجة البيانات التي يتم إرجاعها من نافذة الحوار أو تجاهلها.

حوار سؤال zenity.

نقرنا على "نعم" ، وبالتالي فإن رمز الإرجاع هو صفر يشير إلى "موافق".

لإنشاء نافذة حوار تحذير ، استخدم الأمر التالي:

 zenity - تحذير - العنوان "مساحة محرك أقراص ثابتة منخفضة" - عرض 300 - نص "قد لا توجد مساحة كافية على محرك الأقراص الثابتة لحفظ النسخة الاحتياطية."

الخيار الجديد الذي نستخدمه هو - warning ، والذي يخبر --warning zenity نافذة حوار تحذير.

تظهر نافذة حوار التحذير. إنه ليس سؤالاً ، لذا فهو يحتوي على زر واحد فقط.

نافذة حوار تحذير zenity.

نافذة حوار التقدم

يمكنك استخدام نافذة حوار تقدم zenity لعرض شريط التقدم الذي يشير إلى مدى قرب اكتمال النص البرمجي.

الإعلانات

يتم تقديم شريط التقدم وفقًا للقيم التي يتم إدخالها فيه من البرنامج النصي الخاص بك. لتوضيح المبدأ ، استخدم الأمر التالي:

 (بالنسبة إلى i في $ (seq 0 10 100) ؛ قم بعمل echo $ i ؛ النوم 1 ؛ تم) 

ينهار الأمر على النحو التالي:

  • يخطو الأمر seq خلال تسلسل من 0 إلى 100 ، في خطوات 10.
  • في كل خطوة ، يتم تخزين القيمة في المتغير i . هذا يطبع في نافذة المحطة.
  • يتوقف الأمر مؤقتًا لمدة ثانية واحدة ، بسبب أمر sleep 1 .

يمكننا استخدام هذا مع نافذة حوار تقدم zenity لإظهار شريط التقدم. لاحظ أننا نقوم بتحويل إخراج الأمر السابق إلى zenity:

 (بالنسبة إلى i في $ (seq 0 10 100) ؛ قم بعمل echo $ i ؛ النوم 1 ؛ تم التنفيذ) | zenity - التقدم - العنوان "How-To Geek" - الإغلاق التلقائي 

الخيارات الجديدة التي نستخدمها هي:

  • - التقدم : يخبرنا عن zenity في استخدام نافذة حوار التقدم.
  • - الإغلاق التلقائي: يغلق مربع الحوار عندما يصل شريط التقدم إلى 100 بالمائة.

تظهر نافذة حوار التقدم ، ويتقدم الشريط نحو 100 بالمائة ، ويتوقف مؤقتًا لمدة ثانية واحدة بين كل خطوة.

حوار زخم التقدم.

يمكننا استخدام هذا المفهوم لقيم الأنابيب في zenity لتضمين نافذة حوار التقدم في البرنامج النصي.

أدخل هذا النص في محرر واحفظه باسم "progress.sh."

 ! / بن / باش

قائمة عمل الوظيفة () {

صدى "# عنصر العمل الأول" 
صدى "25"
النوم 1

صدى "# عنصر العمل الثاني" 
صدى "50"
النوم 1

صدى "# عنصر العمل الثالث" 
صدى "75"
النوم 1

صدى "# آخر عنصر عمل" 
صدى "100"
النوم 1

}

قائمة العمل | اللذة - التقدم - العنوان "How-To Geek" - إغلاق تلقائي

خروج 0

فيما يلي تفصيل للبرنامج النصي:

  • يحدد البرنامج النصي وظيفة تسمى work-list . هذا هو المكان الذي تضع فيه أوامرك وإرشاداتك لأداء عمل حقيقي. استبدل كل أوامر sleep 1 بأوامر حقيقية.
  • يقبل zenity خطوط echo "# ..." ويعرضها في نافذة حوار التقدم. قم بتغيير نص هذه السطور ، بحيث تمرر رسائل إعلامية إلى المستخدم.
  • يتم أيضًا قبول خطوط echo التي تحتوي على أرقام ، مثل echo "25" ، من خلال zenity وتعيين قيمة شريط التقدم.
  • يتم استدعاء وظيفة قائمة العمل وتوجيهها في zenity .

استخدم هذا الأمر لجعل البرنامج النصي قابلاً للتنفيذ:

 chmod + x progress.sh 

استخدم هذا الأمر لتشغيل البرنامج النصي:

 ./progress.sh 

يعمل البرنامج النصي وتتغير الرسالة النصية مع تنفيذ كل مرحلة من مراحل البرنامج النصي. يتحرك شريط التقدم بخطوات نحو 100 بالمائة.

نافذة حوار شريط التقدم zenity.

نافذة حوار المقياس

تتيح نافذة حوار المقياس لشخص ما تحريك شريط التمرير لاختيار قيمة رقمية. هذا يعني أنه لا يمكنها إدخال قيمة مرتفعة جدًا أو منخفضة جدًا.

الخيارات الجديدة التي نستخدمها هي:

  • –المقياس : يخبرنا عن zenity أننا نريد استخدام نافذة حوار مقياس.
  • –min-value : يعيّن الحد الأدنى لقيمة المقياس.
  • –max-value : يعيّن الحد الأقصى لقيمة المقياس.
  • –step : يضبط المقدار الذي يتحرك فيه شريط التمرير عند استخدام مفاتيح الأسهم. لا يؤثر هذا على حركات شريط التمرير إذا استخدم شخص ما الماوس.
  • –value : يضبط القيمة الأولية وموضع شريط التمرير.

هذا هو الأمر الذي نستخدمه:

 الاستجابة = $ (zenity --scale --title "How-To Geek" --text "حدد التكبير." - min-value = 0 - max-value = 30 --step = 3 --value15) ؛ صدى $ Response 

الإعلانات

تظهر نافذة حوار شريط التمرير مع ضبط شريط التمرير على 15.

نافذة حوار مقياس zenity.

يمكن للمستخدم تحريك شريط التمرير لتحديد قيمة جديدة.

حوار مقياس zenity مع اختيار المستخدم

عندما تنقر على "موافق" ، يتم نقل القيمة إلى Response المتغيرة وتتم طباعتها في النافذة الطرفية.

نافذة حوار الدخول

تسمح نافذة حوار الإدخال لشخص ما بإدخال نص.

الخيارات الجديدة التي نستخدمها هي:

  • - الإدخال : يخبرنا عن zenity أننا نريد استخدام نافذة حوار إدخال.
  • - نص الإدخال : يمكنك استخدام هذا إذا كنت تريد كتابة قيمة مقترحة في حقل إدخال النص. نحن نستخدم "" لفرض حقل فارغ. هذا ليس مطلوبًا تمامًا ، لكننا أردنا توثيق الخيار.

يبدو الأمر الكامل كما يلي:

 الاستجابة = $ (zenity --entry --text "أدخل مصطلح البحث" - العنوان "Howe-To Geek" --entry-text = "") ؛ صدى $ Response 

تظهر نافذة حوار بسيطة تحتوي على حقل إدخال نص.

نافذة حوار دخول zenity.

يمكن لأي شخص كتابة النص وتحريره.

نافذة حوار إدخال zenity مع نص مكتوب في حقل النص.

عندما ينقر على "موافق" ، يتم تعيين القيمة التي كتبها إلى المتغير Response. نستخدم echo لطباعة قيمة المتغير في النافذة الطرفية.

ضع كل شيء معا

دعونا نجمع هذه التقنيات معًا وننشئ نصًا وظيفيًا. سيقوم البرنامج النصي بإجراء فحص لمعلومات الأجهزة وتقديم النتائج للمستخدم في نافذة نصية قابلة للتمرير. يمكنها اختيار نوع الفحص الطويل أو القصير.

الإعلانات

بالنسبة لهذا البرنامج النصي ، سنستخدم ثلاثة أنواع من نوافذ الحوار ، اثنان منها جديدان بالنسبة لنا:

  • الأول هو قائمة نافذة الحوار. يسمح لشخص ما بالاختيار.
  • والثاني عبارة عن نافذة حوار تقدم تتيح للمستخدم معرفة أن شيئًا ما يحدث ، وعليها الانتظار.
  • والثالث عبارة عن نافذة معلومات نصية تعرض النتائج للمستخدم.

أدخل هذا النص في محرر واحفظه باسم "Hardware-info.sh".

 #! / بن / باش

# عرض قائمة الأجهزة لهذا الكمبيوتر

TempFile = $ (mktemp)

نوع القائمة = `السماوية - العرض = 400 - الارتفاع = 275 - قائمة - راديولست \
     - عنوان "فحص الأجهزة" \
     - نص "حدد نوع الفحص:"
     - عمود "تحديد" \
     - العمود 'Scan Type' TRUE "Short" FALSE "Long" `

إذا [[$؟ - مكافئ 1]] ؛ ومن بعد

  # ضغطوا على إلغاء أو أغلقوا نافذة الحوار 
  zenity --error --title = "رفض المسح الضوئي" - العرض = 200 \
       --text = "تم تخطي فحص الأجهزة"
  مخرج 1
 
elif [$ ListType == "قصير"] ؛ ومن بعد

  # اختاروا زر الاختيار القصير 
  العلم = "- قصير"
 
آخر

  # اختاروا زر الاختيار الطويل 
  علم = "" 
فاي

# البحث عن معلومات الأجهزة بالقيمة المناسبة في $ Flag
hwinfo $ Flag | نقطة الإنطلاق> (السماوية - العرض = 200 - الارتفاع = 100 \
     - العنوان = "تجميع المعلومات" - التقدم \
     --pulsate --text = "جارٍ فحص الأجهزة ..." \
     - قتل تلقائي - إغلاق تلقائي)> $ {TempFile}
 
# عرض معلومات الأجهزة في نافذة التمرير
الارتفاع - العرض = 800 - الارتفاع = 600 \
     - العنوان "تفاصيل الجهاز" \
     --text-info --filename = "$ {TempFile}"
 
خروج 0

استخدم هذا الأمر لجعله قابلاً للتنفيذ:

 chmod + x Hardware-info.sh 

"chmod + x haredware-info.sh في" نافذة طرفية.

ينشئ هذا البرنامج النصي ملفًا مؤقتًا ، ويتم الاحتفاظ باسم الملف في متغير TempFile:

 TempFile = $ (mktemp)

يستخدم البرنامج النصي خيار --list لإنشاء نافذة حوار zenity تسمى نافذة حوار list. تخبر الأحرف "\" في نهاية السطور البرنامج النصي أن يعاملهم كسطر واحد طويل يلتف حوله. ها هي العملية:

  • نحدد عرض وارتفاع النافذة.
  • تدعم نافذة حوار القائمة الأعمدة. يتسبب الخيار - --radiolist في أن يكون العمود الأول عمودًا من أزرار الاختيار.
  • قمنا بتعيين عنوان وموجه نصي للنافذة.
  • قمنا بتعيين عنوان العمود الأول ليكون "تحديد". سيكون محتوى هذا العمود هو أزرار الاختيار.
  • قمنا بتعيين عنوان العمود الثاني ليكون "تحديد" ، ونقدم محتوى العمود الثاني. يحتوي هذا العمود على تصنيفين نصيين: "قصير" و "طويل". تعني المؤشرات TRUE و FALSE أن الخيار "Short" محدد بشكل افتراضي عند ظهور نافذة الحوار.
  • نقوم بتخزين النتيجة من نافذة الحوار هذه في متغير يسمى ListType .
 نوع القائمة = `السماوية - العرض = 400 - الارتفاع = 275 - قائمة - راديولست \ 
     - عنوان "فحص الأجهزة" \ 
     - نص "حدد نوع الفحص:" 
     - عمود "تحديد" \ 
     - العمود 'Scan Type' TRUE "Short" FALSE "Long" `

إذا ضغط المستخدم على "إلغاء" ، فلن نحتاج إلى التحقق من القيمة في ListType, يمكننا ببساطة الخروج. إذا ضغط على "موافق" ، نحتاج إلى معرفة ما إذا كان قد حدد زر الاختيار "قصير" أو "طويل":

  • المعلمة الخاصة $? يساوي صفرًا إذا ضغط المستخدم على "موافق". يساوي واحدًا إذا ضغط على "إلغاء" أو أغلق النافذة.
  • إذا كان يساوي واحدًا ، يعرض البرنامج النصي نافذة حوار معلومات الخطأ ويخرج. إذا ضغط على "موافق" ، ننتقل إلى اختبار القيمة في متغير ListType .
  • إذا احتفظ متغير ListType بالقيمة "Short" ، يقوم البرنامج النصي بتعيين متغير يسمى Flag يساوي "–short".
  • إذا كان متغير ListType لا يحتوي على القيمة "Short" ، فيجب أن يحتفظ بالقيمة "Long". يقوم البرنامج النصي بتعيين متغير يسمى Flag يساوي "" ، وهو عبارة عن سلسلة فارغة.
  • يستخدم البرنامج النصي متغير Flag في القسم التالي.
 إذا [[$؟ - مكافئ 1]] ؛ ومن بعد 

  # ضغطوا على إلغاء أو أغلقوا نافذة الحوار 
  zenity --error --title = "رفض المسح الضوئي" - العرض = 200 \ - نص = "تم تخطي فحص الجهاز" 
  مخرج 1 

elif [$ ListType == "قصير"] ؛ ومن بعد 

 # اختاروا زر الاختيار القصير 
 العلم = "- قصير" 

آخر 

 # اختاروا زر الاختيار الطويل 
 علم = "" 
فاي
الإعلانات

الآن بعد أن عرف البرنامج النصي نوع الفحص الذي يريده المستخدم ، يمكننا إجراء فحص لمعلومات الأجهزة:

  • يستدعي البرنامج النصي الأمر hwinfo بالقيمة الموجودة في متغير Flag .
  • إذا احتوى Flag على "–short" ، يقوم أمر hwinfo بإجراء مسح قصير. إذا كانت قيمة Flag هي "" ، فلن يمر أي شيء إلى hwinfo ويتم إجراء مسح افتراضي طويل.
  • يقوم البرنامج النصي بإخراج الإخراج من hwinfo إلى tee . يرسل tee الإخراج إلى zenity و TempFile .
  • يقوم البرنامج النصي بإنشاء نافذة حوار شريط التقدم. يحدد عرض وارتفاع نافذة الحوار والعنوان ونصوص المطالبة.
  • لا يستطيع البرنامج النصي معرفة مقدار المعلومات التي hwinfo أمر hwinfo مسبقًا ، لذلك لا يمكنه تعيين شريط التقدم للتقدم بشكل صحيح إلى 100 بالمائة. يؤدي الخيار --pulsate إلى عرض مربع حوار التقدم مؤشرًا متحركًا. يقوم هذا بإعلام المستخدم بحدوث شيء وعليه الانتظار.
  • ينهي خيار --auto-kill النص البرمجي إذا نقر أحد الأشخاص على "إلغاء".
  • يؤدي خيار الإغلاق التلقائي --auto-close إلى إغلاق مربع حوار التقدم تلقائيًا عند اكتمال العملية التي يراقبها.
 # البحث عن معلومات الأجهزة بالقيمة المناسبة في $ Flag
hwinfo $ Flag | نقطة الإنطلاق> (السماوية - العرض = 200 - الارتفاع = 100 \
     - العنوان = "تجميع المعلومات" - التقدم \
     --pulsate --text = "جارٍ فحص الأجهزة ..." \
     - قتل تلقائي - إغلاق تلقائي)> $ {TempFile}

عند اكتمال فحص hwinfo ، يستدعي البرنامج النصي zenity لإنشاء نافذة حوار معلومات نصية باستخدام الخيار --text-info . تعرض نافذة حوار معلومات النص محتويات ملف TempFile :

  • يقوم البرنامج النصي بتعيين عرض وارتفاع نافذة الحوار ونص العنوان.
  • يُستخدم الخيار --flename لقراءة محتويات الملف المحتفظ به في متغير TempFIle .
 # عرض معلومات الأجهزة في نافذة التمرير 
الارتفاع - العرض = 800 - الارتفاع = 600 \ 
     - العنوان "تفاصيل الجهاز" \ 
     --text-info --filename = "$ {TempFile}"

عندما يغلق المستخدم نافذة حوار معلومات النص ، يخرج البرنامج النصي.

 خروج 0

دعنا نطلقها ونلقي نظرة.

 ./hardware-info.sh 

يظهر مربع القائمة. يتم تحديد الخيار "قصير" افتراضيًا.

مربع حوار قائمة مع تحديد الخيار "قصير".

دعنا نختار "طويل" ، ثم انقر على "موافق".

مربع حوار قائمة مع تحديد الخيار "طويل".

تظهر نافذة التقدم مع مؤشر انزلاق. يبقى على الشاشة حتى اكتمال فحص الأجهزة.

نافذة التقدم مع مؤشر انزلاق.

عند اكتمال فحص الجهاز ، تظهر نافذة حوار المعلومات النصية مع تفاصيل من الفحص.

معلومات فحص الأجهزة في نافذة حوار معلومات النص.

انقر فوق موافق."

الإعلانات

حتى الفارس المتشدد في سطر الأوامر يجب أن يعترف بوجود زوج من نوافذ حوارات واجهة المستخدم الرسومية يمكن أن يضفي لمسة احترافية على نص Bash النصي المتواضع.