إنشاء واجهة مستخدم سريعة في Python بلغة بسيطة

إنشاء واجهة مستخدم سريعة في Python بلغة بسيطة

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

مكتبات Python لبناء واجهة المستخدم

في الأساس ، هناك 3 مكتبات كبيرة لواجهة المستخدم لـ Python تسمى Tkinter و wxPython و PyQT. ندرس جميع هذه المكتبات الثلاث في هذه المقالة ، ولكن ما نبحث عنه ليس في أي من هذه المكتبات. تعتبر مكتبات Python عمومًا طريقة جيدة لعزل الجزء التقني البحت من البرامج. ومع ذلك ، فإن معظم تركيزنا في هذه المقالة على الخيار الرابع ، مكتبة PySimpleGUI. تستخدم هذه المكتبة جميع المكتبات الثلاث المذكورة أعلاه ، ولكنها تحافظ على أجزائها الفنية بعيدًا عن رؤيتنا. بدون مزيد من اللغط ، دعنا نلقي نظرة على هذه المكتبة ونحل مشكلة حقيقية في نفس الوقت.

التحقق من تماثل ملفين

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

ترميز واجهة المستخدم

يمكننا استخدام الكود التالي لإنشاء واجهة المستخدم:

import PySimpleGUI as sg
layout = [
    [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(),
     sg.Checkbox('MD5'), sg.Checkbox('SHA1')
     ],
    [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(),
     sg.Checkbox('SHA256')
     ],
    [sg.Output(size=(88, 20))],
    [sg.Submit(), sg.Cancel()]
]
window = sg.Window('File Compare', layout)
while True:                             # The Event Loop
    event, values = window.read()
    # print(event, values) #debug
    if event in (None, 'Exit', 'Cancel'):
        break

والتي تظهر النتيجة التالية:

التحقق من منطق البرنامج

الآن بعد أن أصبحت واجهة المستخدم جاهزة ، يمكننا بسهولة توصيل بقية الكود. يكفي مراقبة مدخلات المستخدم ومن ثم التصرف وفقًا لذلك. يمكن القيام بذلك ببساطة عن طريق استخدام الكود التالي:

import PySimpleGUI as sg
import re
import hashlib
def hash(fname, algo):
    if algo == 'MD5':
        hash = hashlib.md5()
    elif algo == 'SHA1':
        hash = hashlib.sha1()
    elif algo == 'SHA256':
        hash = hashlib.sha256()
    with open(fname) as handle: #opening the file one line at a time for memory considerations
        for line in handle:
            hash.update(line.encode(encoding = 'utf-8'))
    return(hash.hexdigest())
layout = [
    [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(),
     sg.Checkbox('MD5'), sg.Checkbox('SHA1')
     ],
    [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(),
     sg.Checkbox('SHA256')
     ],
    [sg.Output(size=(88, 20))],
    [sg.Submit(), sg.Cancel()]
]
window = sg.Window('File Compare', layout)
while True:                             # The Event Loop
    event, values = window.read()
    # print(event, values) #debug
    if event in (None, 'Exit', 'Cancel'):
        break
    if event == 'Submit':
        file1 = file2 = isitago = None
        # print(values[0],values[3])
        if values[0] and values[3]:
            file1 = re.findall('.+:/.+.+.', values[0])
            file2 = re.findall('.+:/.+.+.', values[3])
            isitago = 1
            if not file1 and file1 is not None:
                print('Error: File 1 path not valid.')
                isitago = 0
            elif not file2 and file2 is not None:
                print('Error: File 2 path not valid.')
                isitago = 0
            elif values[1] is not True and values[2] is not True and values[4] is not True:
                print('Error: Choose at least one type of Encryption Algorithm')
            elif isitago == 1:
                print('Info: Filepaths correctly defined.')
                algos = [] #algos to compare
                if values[1] == True: algos.append('MD5')
                if values[2] == True: algos.append('SHA1')
                if values[4] == True: algos.append('SHA256')
                filepaths = [] #files
                filepaths.append(values[0])
                filepaths.append(values[3])
                print('Info: File Comparison using:', algos)
                for algo in algos:
                    print(algo, ':')
                    print(filepaths[0], ':', hash(filepaths[0], algo))
                    print(filepaths[1], ':', hash(filepaths[1], algo))
                    if hash(filepaths[0],algo) == hash(filepaths[1],algo):
                        print('Files match for ', algo)
                    else:
                        print('Files do NOT match for ', algo)
        else:
            print('Please choose 2 files.')
window.close()

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

كلمة أخيرة

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

ما هو رد فعلك؟

like

dislike

love

funny

angry

sad

wow