ساخت سریع UI در پایتون | به زبان ساده

۲۵۲۸ بازدید
آخرین به‌روزرسانی: ۰۴ مهر ۱۴۰۲
زمان مطالعه: ۳ دقیقه
ساخت سریع UI در پایتون | به زبان ساده

بزرگ‌ترین مزیت پایتون، سهولت استفاده و فراوانی کتابخانه‌ها برای همه کارها است. بدین ترتیب با نوشتن چند خط کد همه کاری می‌توان انجام داد. تا زمانی که اسکریپت‌های پایتون را برای استفاده شخصی می‌نویسید یا مخاطبان هدف شما به قدر کافی فنی هستند، نیاز نیست در مورد «رابط کاربری» (User Interface) یا به اختصار UI نگران باشید. اما برخی اوقات مخاطبان ما اطلاعات فنی چندانی ندارند. آن‌ها به استفاده از اسکریپت‌های پایتون تا زمانی علاقه دارند که مجبور نباشند به یک خط کد نگاه کنند. در این موارد ارائه اسکریپت‌های خط فرمان کار مفیدی محسوب نمی‌شود و باید یک UI برای آن‌ها تدارک ببینیم. با این که برخی از افراد از کلاینت‌های دسکتاپ به جای UI مبتنی بر وب استفاده می‌کنند، اما ما در این مقاله روی ساخت سریع UI در پایتون تمرکز خواهیم داشت.

کتابخانه‌های پایتون برای ساخت UI

اساساً 3 کتابخانه بزرگ UI برای پایتون وجود دارند که Tkinter ،wxPython و PyQT نام دارند. ما در این مقاله هر سه این کتابخانه‌ها را بررسی می‌کنیم، ‌اما چیزی که به دنبالش هستیم در هیچ کدام از این کتابخانه‌ها نیست. کتابخانه‌های پایتون به طور کلی یک روش مناسب برای جداسازی بخش کاملاً فنی برنامه‌های محسوب می‌شوند. با این حال اغلب تمرکز ما در این مقاله روی گزینه چهارم یعنی کتابخانه PySimpleGUI است. این کتابخانه از هر 3 کتابخانه فوق استفاده می‌کند، اما بخش‌های فنی آن‌ها را از دید ما دور نگاه می‌دارد. بدون هیچ گونه توضیح اضافی به بررسی این کتابخانه می‌پردازیم و یک مسئله واقعی را نیز هم‌زمان حل خواهیم کرد.

بررسی یکسان بودن دو فایل

فرض کنید پروژه‌ای داریم که در آن می‌خواهیم داده‌ها را در پایتون با هم مقایسه کنیم. بدین منظور باید دو فایل را بارگذاری کنیم و سپس رمزگذاری مناسب برای استفاده در مقایسه فایل را انتخاب کنیم.

کدنویسی UI

برای ساخت UI می‌توانیم از کد زیر استفاده کنیم:

1import PySimpleGUI as sg
2layout = [
3    [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(),
4     sg.Checkbox('MD5'), sg.Checkbox('SHA1')
5     ],
6    [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(),
7     sg.Checkbox('SHA256')
8     ],
9    [sg.Output(size=(88, 20))],
10    [sg.Submit(), sg.Cancel()]
11]
12window = sg.Window('File Compare', layout)
13while True:                             # The Event Loop
14    event, values = window.read()
15    # print(event, values) #debug
16    if event in (None, 'Exit', 'Cancel'):
17        break

که نتیجه زیر را تولید می‌کند:

بررسی منطق برنامه

اینک که UI آماده است به راحتی می‌توانیم بقیه کد را نیز متصل کنیم. کافی است ورودی‌های کاربر را مورد رصد قرار دهیم و سپس بر همین اساس عمل کنیم. این کار به سادگی با استفاده از کد زیر ممکن است:

1import PySimpleGUI as sg
2import re
3import hashlib
4def hash(fname, algo):
5    if algo == 'MD5':
6        hash = hashlib.md5()
7    elif algo == 'SHA1':
8        hash = hashlib.sha1()
9    elif algo == 'SHA256':
10        hash = hashlib.sha256()
11    with open(fname) as handle: #opening the file one line at a time for memory considerations
12        for line in handle:
13            hash.update(line.encode(encoding = 'utf-8'))
14    return(hash.hexdigest())
15layout = [
16    [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(),
17     sg.Checkbox('MD5'), sg.Checkbox('SHA1')
18     ],
19    [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(),
20     sg.Checkbox('SHA256')
21     ],
22    [sg.Output(size=(88, 20))],
23    [sg.Submit(), sg.Cancel()]
24]
25window = sg.Window('File Compare', layout)
26while True:                             # The Event Loop
27    event, values = window.read()
28    # print(event, values) #debug
29    if event in (None, 'Exit', 'Cancel'):
30        break
31    if event == 'Submit':
32        file1 = file2 = isitago = None
33        # print(values[0],values[3])
34        if values[0] and values[3]:
35            file1 = re.findall('.+:\/.+\.+.', values[0])
36            file2 = re.findall('.+:\/.+\.+.', values[3])
37            isitago = 1
38            if not file1 and file1 is not None:
39                print('Error: File 1 path not valid.')
40                isitago = 0
41            elif not file2 and file2 is not None:
42                print('Error: File 2 path not valid.')
43                isitago = 0
44            elif values[1] is not True and values[2] is not True and values[4] is not True:
45                print('Error: Choose at least one type of Encryption Algorithm')
46            elif isitago == 1:
47                print('Info: Filepaths correctly defined.')
48                algos = [] #algos to compare
49                if values[1] == True: algos.append('MD5')
50                if values[2] == True: algos.append('SHA1')
51                if values[4] == True: algos.append('SHA256')
52                filepaths = [] #files
53                filepaths.append(values[0])
54                filepaths.append(values[3])
55                print('Info: File Comparison using:', algos)
56                for algo in algos:
57                    print(algo, ':')
58                    print(filepaths[0], ':', hash(filepaths[0], algo))
59                    print(filepaths[1], ':', hash(filepaths[1], algo))
60                    if hash(filepaths[0],algo) == hash(filepaths[1],algo):
61                        print('Files match for ', algo)
62                    else:
63                        print('Files do NOT match for ', algo)
64        else:
65            print('Please choose 2 files.')
66window.close()

با اجرای کد فوق، خروجی زیر حاصل می‌شود:

سخن پایانی

با این که این UI چندان زیبا نیست، اما این کتابخانه به ما امکان می‌دهد که اقدام به ساخت سریع UI در پایتون بکنیم و آن‌ها را با هر کسی که نیاز دارد به اشتراک بگذاریم. نکته جالب‌تر این است که کدی که به این منظور نیاز داریم، کاملاً ساده و خوانا است. ما همچنان با مشکل اجرای کد برای رسیدن به UI مواجه خواهیم بود، که بحث اشتراک‌گذاری را کمی دشوار می‌سازد، اما می‌توانید از چیزی مانند PyInstaller استفاده کنید که اسکریپت پایتون را به یک فایل exe. تبدیل می‌کند و افراد می‌توانند به سادگی با دابل-کلیک اجرا کنند.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
۳ دیدگاه برای «ساخت سریع UI در پایتون | به زبان ساده»

سلام
متوجه کارایی برنامه هستم منتهی سوالی دارم ، اگر ما کارایی برنامه رو طوری تنظیم کنیم که بخوایم از یه فایل اکسل لینک یک سری اطلاعات برداشته شود و بر روی اون لینک ها عملیاتی انجام دهیم روش کار به چه صورت میباشد (طریقه برداشتن لینک از فایل اکسلی که با استفاده از Browse داخل برنامه وارد کردیم)
ممنون میشم راهنمایی کنید

سلام
شما چگونه کاری کردید که وقتی روی browse کلیک کنیم، پنجره ی انتخاب فایل باز شود؟؟
ممنون میشم راهنماییم کنید.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *