لماذا هناك حاجة إلى مؤشرات التقدم؟
مؤشرات التقدم (شريط التقدم) - عرض مرئي لعملية العمل. إنها تخففنا من الحاجة إلى القلق بشأن ما إذا كان البرنامج النصي معلقًا ، ويعطي فكرة بديهية عن سرعة تنفيذه ويقترح مقدار الوقت المتبقي حتى الانتهاء.
قد يشير الشخص الذي لم يستخدم مؤشرات التقدم من قبل إلى أن تنفيذها يمكن أن يعقد التعليمات البرمجية إلى حد كبير. لحسن الحظ ، هذا ليس كذلك. توضح الأمثلة الصغيرة أدناه كيفية البدء بسرعة وسهولة في تتبع التقدم المحرز في وحدة التحكم أو في واجهة مكتبة الرسومات PySimpleGUI التي تكتسب بسرعة.
باستخدام التقدم
أول واحد لدينا هو وحدة التقدم .
كل ما هو مطلوب منك هو الإشارة إلى عدد التكرارات المتوقعة ونوع المؤشر واستدعاء الوظيفة في كل تكرار:
import time from progress.bar import IncrementalBar mylist = [1,2,3,4,5,6,7,8] bar = IncrementalBar('Countdown', max = len(mylist)) for item in mylist: bar.next() time.sleep(1) bar.finish()
نتيجة العمل:
هناك مؤشرات لكل ذوق:
نحن نستخدم tqdm
التالي في السطر هو مكتبة tqdm .
مؤشر تقدم سريع وقابل للتوسعة لـ Python و CLI
ستكون هناك حاجة إلى استدعاء وظيفة واحدة فقط للحصول على نتيجة مماثلة لتلك السابقة:
import time from tqdm import tqdm mylist = [1,2,3,4,5,6,7,8] for i in tqdm(mylist): time.sleep(1)
نحصل على:
بالطبع ، تأتي الحزمة مع مجموعة من الإعدادات والخيارات.
نحن نستخدم التقدم على قيد الحياة
إصدار آخر من بناء الجملة ، الرسوم المتحركة الافتراضية أكثر مما كانت عليه في الأمثلة السابقة:
from alive_progress import alive_bar import time mylist = [1,2,3,4,5,6,7,8] with alive_bar(len(mylist)) as bar: for i in mylist: bar() time.sleep(1)
النتيجة:
مؤشر تقدم واجهة المستخدم الرسومية للنص
في بعض الأحيان يصبح من الضروري توفير مؤشر بياني للمستخدم النهائي.
ما هو الكود المطلوب لتحقيق هذه النتيجة؟ قليلا:
import PySimpleGUI as sg import time mylist = [1,2,3,4,5,6,7,8] for i, item in enumerate(mylist): sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-') time.sleep(1)
المؤشر في تطبيق PySimpleGUI
النظر في تنفيذ المؤشر في PySimpleGUI .
إليك كيفية القيام بذلك:
import PySimpleGUI as sg import time mylist = [1,2,3,4,5,6,7,8] progressbar = [ [sg.ProgressBar(len(mylist), orientation='h', size=(51, 10), key='progressbar')] ] outputwin = [ [sg.Output(size=(78,20))] ] layout = [ [sg.Frame('Progress',layout= progressbar)], [sg.Frame('Output', layout = outputwin)], [sg.Submit('Start'),sg.Cancel()] ] window = sg.Window('Custom Progress Meter', layout) progress_bar = window['progressbar'] while True: event, values = window.read(timeout=10) if event == 'Cancel' or event is None: break elif event == 'Start': for i,item in enumerate(mylist): print(item) time.sleep(1) progress_bar.UpdateBar(i + 1) window.close()
استنتاج
كما ترون ، لا يوجد شيء معقد في إضافة معلومات حول التقدم المحرز في التنفيذ: هناك القليل من التعليمات البرمجية ، وزيادة الاستجابة إلى حد كبير. استخدم المؤشرات لتخمين مرة أخرى إذا كانت العملية معلقة أم لا!