-
جمعه, ۱۰ تیر ۱۴۰۱، ۱۰:۱۷ ق.ظ
-
۷۳۹
menufather 1.0 در پایتون برای ساخت منو در کنسول
به وسیله ی کتابخونه ی menufather میتونید به راحتی در کنسول و محیط CLI منو بسازید (windows / linux)
این کتابخونه بسیار کم حجمه و همچنین کار باهاش خیلی خیلی راحته .
۱ . نصب کتابخانه :
WINDOWS
> pip install menufather
LINUX
MrPython@debian:~$ pip3 install menufather
۲ . ساخت اولین منو :
پس از ایمپورت کردن کتابخانه های مورد نیاز (time برای ایجاد تاخیر) ، عنوان یا title منو مورد نظرمون رو تعریف میکنیم و داخل متغییر title میریزیم (خط ۴) . سپس آیتم های منو رو داخل یک لیست به نام items قرار میدیم (خط ۵) .
حالا همه چیز اماده است . باید منو رو بسازیم . برای اینکار menufather.Menu رو فراخونی کردیم که برامون منو میسازه (خط ۶) . این تابع دو ورودی میگیره . اولین ورودی title هستش که همون عنوانی رو بهش دادیم که در خط ۴ تعریف کردیم . ورودی بعدی آیتم های منو هستش که items تعریف شده در خط ۵ رو به اون دادیم و نهایتا منو ساخته شده رو داخل متغییر menu ذخیره کردیم .
حالا باید با استفاده از تابع menu.show منویی که ساختیم رو نمایش بدیم (خط ۷)
تا اینجا منوی خودمون رو ساختیم در قدم بعدی باید یک loop برای برناممون بنویسیم که در اون دائما منتظر بمونیم کاربر یکی از آیتم های منو رو انتخاب کنه و با توجه به اون برناممون واکنش نشون بده . برای اینکار یک حلقه while True نوشتیم (خط ۹) .
دقت کنید داخل حلقه بینهایتمون حتما باید یک تاخیر (ترجیحا بین نیم تا یک ثانیه) وجود داشته باشه . برای همین اول حلقه یک تاخیر ۱ ثانیه ای قرار دادیم . حالا میتونیم خیلی راحت آیتم انتخاب شده کاربر رو دریافت کنیم . برای اینکار تابع menu.get_selected_item رو فراخونی میکنیم . اگر کاربر در اون لحظه آیتمی رو انتخاب کرده بود ، این تابع اندیس اون آیتم در لیست items که بالاتر تعریف کردیم رو برمیگردونه در غیر این صورت یک None بر میگردونه . در خط ۱۱ ما از این تابع استفاده کردیم و آیتم انتخاب شده رو گرفتیم و ریختیم داخل متغییر selected .حالا چک کردیم اگه برابر با None نبود (یعنی یه چیزی انتخاب شده) ، از حلقه خارج بشه و اسم آیتم انتخاب شده رو بنویسه .
نکته کنکوری : دقت کنید هر بار که تابع menu.get_selected_item رو فراخونی میکنیم ، اگه آیتمی انتخاب شده بود ، اونو برمیگردونه و از حافظه خودش حذف میکنه . یعنی دفعه بعدی که فراخونی میشه این تابع حتما None رو برمیگردونه . به عبارتی کتابخونه آیتم انتخاب شده رو نگه میداره تا زمانی که شما یک بار menu.get_selected_item رو فراخونی کنید . برای همین همون اول کارتون تو حلقه یک بار اونو داخل یه متغییری مثل selected ذخیره کنید که همیشه در طول حلقه داشته باشیدش .
بعد از اجرای سورس بالا :
همینطور که میبینید منو برای ما ساخته شده . با استفاده از کلید های جهت روی کیبورد میشه داخل این منو بالا و پایین رفت .
۳ . قفل و آزاد کردن منو :
با استفاده از تابع های ()menu.lock و ()menu.unlock به ترتیب میتونید منو رو قفل کنید یا اونو باز و آزاد کنید . اگه منو قفل بشه کاربر دیگه کاری نمیتونه داخلش انجام بده . نه میتونه بالا پایین بره (با کلید های جهت) و نه چیزی انتخاب کنه .
۴ . ویرایش آیتم های منو :
اگه جایی نیاز داشتیم همینطور که منو در حال اجرا هستش یکی از آیتم های اون تغییر کنه و ویرایش بشه اسمش ، میتونیم از تابع
(itemIndex , new)menu.updateItem استفاده کنیم . این تابع دو ورودی میگیره . اولیش اندیس اون آیتمی هستش داخل لیست items که میخوایم تغییرش بدیم . دومیش هم اسم جدید اون آیتم هست که میخوایم آیتم قبلی به این اسم تغییر پیدا کنه .
مثال :
دستور بالا اندیس دوم از آیتم های منو رو اسمشو به Contact تغییر میده .
۵ . بازسازی منو ها :
گاهی اوقات هستش که ما میخوایم وقتی کاربر یکی از آیتم های منو رو انتخاب میکنه ، یک منو جدید براش باز بشه . تو این موارد میتونیم از قابلیت بازسازی منو ها در کتابخانه استفاده کنیم . به این صورت که منوی فعلی که داریم (متغییر menu) رو تمام آیتم ها و عنوانشو عوض میکنیم و یک منو جدید پدید میاد . برای اینکار میتونیم از تابع (new_title , new_items)menu.reCreate استفاده کنیم . این تابع دو ورودی میگیره . ورودی اول عنوان جدید هستش و ورودی دوم لیست آیتم های جدید هستش . بعد فراخونی این تابع منو بازسازی میشه .
مثال :
بعد از اجرای سورس بالا ، در ابتدا یک منو داریم که یه آیتمی داره به نام "goto menu 2" بعد از انتخاب این آیتم ، وارد یک منو جدید میشیم .
۶ . اسکرول خودکار :
اگه تعداد آیتم های منوتون اونقدر زیاد هست که از صفحه میزنه بیرون نگران اسکرول کردن نباشید . خود کتابخونه برای آیتم های تعداد زیاد که از سایز استاندارد میزنن بیرون ، حالت اسکرول کردن با همون کلید های جهت رو شبیه سازی میکنه .
امیدوارم مفید واقع بشه . سوالی بود در بخش نظرات مطرح کنید .
همچنین خیلی خوشحال میشیم اگه شما دوستان عزیز به پیشرفت این پروژه کمک کنید .
لینک گیت هاب کتابخانه : https://github.com/mrpythonblog/menufather
یا حق !
Telegram Channel : @mrpythonblog