زبان پایتون (Python) به دلیل یادگیری آسان یکی از محبوبترین زبانها برای تولید نرمافزارهای مختلف است. هرچند به نظر میرسد برنامههای کاربردی وب و موبایل از بازار توسعه نرمافزار پیشی گرفتهاند، اما همچنان تقاضا برای برنامههای دسکتاپ رابط کاربری گرافیکی (GUI) سنتی وجود دارد. برای توسعهدهندگانی که علاقهمند به ساخت این نوع برنامهها در پایتون هستند، طیف گستردهای از کتابخانهها برای انتخاب موجود است. پای کیوت (PyQt) یک کتابخانه پایتون برای ایجاد برنامههای رابط کاربری گرافیکی با استفاده از کیت ابزار Qt است. PyQt که توسط Riverbank Computing ایجاد شده است، یک نرمافزار رایگان با مجوز (GPL) است و از سال 1999 در حال توسعه است. PyQt5 در سال 2016 منتشر شد. در این آموزش PyQt5، نحوه استفاده از Python 3 و Qt را برای ایجاد رابط کاربری گرافیکی در ویندوز، مک یا لینوکس خواهید آموخت. همچنین در ادامه ایجاد یک نصب کننده برای برنامه را توضیح خواهیم داد.
PyQt5 چیست؟
PyQt کتابخانهای است که به شما امکان میدهد از فریمورک Qt GUI در پایتون استفاده کنید. خود Qt در C++ نوشته شده است که با استفاده از آن از طریق پایتون، میتوانید اپلیکیشنها را با سرعت بسیار بیشتری بسازید.
PyQt5 به جدیدترین نسخه پنجم Qt اشاره دارد. ممکن است هنوز هم نام (Py)Qt4 را در وب بیابید، اما این نسخه دیگر قدیمی شده است و پشتیبانی نمیشود. به همین دلیل قصد داریم در این مقاله به آموزش pyqt5 بپردازیم.
رقیب PyQt در حال حاضر Qt برای پایتنون است. API آنها تقریباً یکسان است. برخلاف PyQt، تحت مجوز LGPL است و بنابراین میتواند به صورت رایگان در پروژههای تجاری استفاده شود. همچنین توسط شرکت Qt پشتیبانی میشود؛ اما امروزه بیشتر از PyQt استفاده میشود زیرا جاافتادهتر است. از آنجایی که API ها بسیار مشابه هستند، میتوانید بعداً به راحتی برنامههای خود را به Qt برای Python تغییر دهید.
نحوه نصب PyQt
اولین قدم برای آموزش pyqt5 نحوه نصب pyQt است. بهترین راه برای مدیریت وابستگیها در پایتون استفاده از یک محیط مجازی است. یک محیط مجازی به سادگی یک فهرست محلی است که شامل کتابخانههای یک پروژه خاص است. این برخلاف نصب آن دسته از کتابخانهها در سراسر سیستم است که بر تمام پروژههای دیگر شما نیز تأثیر میگذارد.
برای ایجاد یک محیط مجازی در دایرکتوری فعلی، دستور زیر را اجرا کنید:
python3 -m venv venv
این دستور پوشه venv/ را ایجاد میکند. برای فعال کردن محیط مجازی در ویندوز، دستور زیر را اجرا کنید:
call venv/scripts/activate.bat
در مک و لینوکس از دستور زیر استفاده کنید:
source venv/bin/activate
میتوانید ببینید که محیط مجازی با پیشوند (venv) در پوسته شما فعال است:
برای نصب PyQt، دستور زیر را صادر کنید:
pip install PyQt5
به همین سادگی شما با موفقیت PyQt5 را راهاندازی کردید.
اگر به مفاهیم پایتون مسلط نیستید، فرادرس آموزشهای متنوع و کاملی را توسط اساتید مجرب ارائه میدهد که به راحتی با استفاده از آن میتوانید در حوزه برنامهنویسی به زبان پایتون حرفهای شوید. یکی از این آموزشها که در زمینه آموزش pyqt5 است به چگونگی نصب pyqt5 میپردازد. برای دریافت این آموزش و مجموعه آموزش برنامه نویسی پایتون فرادرس، میتوانید همین حالا با کلیک روی لینک زیر به فرادرس مراجعه کنید و آموزش ذکر شده را دریافت کنید.
- مجموعه آموزش برنامه نویسی پایتون (Python)
- آموزش نصب PyQt5 در پایتون
چگونه رابط گرافیکی بسازید
امیدواریم تا اینجای مقاله آموزش pyqt5 برای شما مفید بوده باشد. وقت آن است که اولین برنامه رابط کاربری گرافیکی خود را بنویسیم! با فعال بودن محیط مجازی، پایتون را راهاندازی کنید؛ و دستورات زیر را اجرا کنید:
ابتدا به پایتون میگوییم که PyQt را از طریق عبارت import بارگذاری کند:
from PyQt5.QtWidgets import QApplication, QLabel
سپس یک QApplication با دستور زیر ایجاد میکنیم:
app = QApplication([])
این کار یکی از الزامات Qt است: هر برنامه رابط کاربری گرافیکی باید دقیقاً یک نمونه از QApplication داشته باشد. بسیاری از قسمتهای Qt تا زمانی که خط بالا را اجرا نکنید کار نمیکنند؛ بنابراین تقریباً در هر برنامه (Py)Qt که مینویسید به آن نیاز خواهید داشت.
به راکت های [] در خط بالا نشاندهنده آرگومانهای خط فرمان هستند که به برنامه ارسالشدهاند. از آنجایی که برنامه ما از هیچ پارامتری استفاده نمیکند، به راکت ها را خالی میگذاریم.
اکنون، برای دیدن آن، یک برچسب ساده ایجاد میکنیم:
label = QLabel(‘Hello World!’)
سپس به Qt میگوییم که برچسب را روی صفحه نمایش دهد:
label.show()
بسته به سیستم عامل شما، از قبل یک پنجره کوچک باز میشود:
آخرین مرحله این است که کنترل را به Qt بسپارید و از آن بخواهید “برنامه را تا زمانی که کاربر ببندد اجرا کند”. این کار از طریق دستور زیر انجام میشود:
app.exec()
به همین سادگی شما اولین برنامه رابط کاربری گرافیکی خود را با پایتون و Qt ساختید.
ویجت ها (Widgets)
هر چیزی که در یک برنامه (Py)Qt میبینید یک ویجت است: دکمهها، برچسبها، پنجرهها، دیالوگها، نوارهای پیشرفت و غیره؛ مانند عناصر HTML، ویجت ها اغلب تو در تو هستند. بهعنوان مثال، یک پنجره میتواند حاوی یک دکمه باشد که به نوبه خود حاوی یک برچسب است.
تصویر زیر رایجترین ویجت های Qt را نشان میدهد:
لایه ها (Layouts)
مانند مثال بالا که در مقاله آموزش pyqt5 بیان شد، رابط کاربری گرافیکی شما به احتمال زیاد از چندین ویجت تشکیل شده است. در این مورد، باید به Qt بگویید که چگونه آنها را در موقعیت قرار دهد. به عنوان مثال، میتوانید از QVBoxLayout برای قرار دادن ویجت ها به صورت عمودی استفاده کنید:
کد این مورد به صورت زیر است:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton(‘Top’))
layout.addWidget(QPushButton(‘Bottom’))
window.setLayout(layout)
window.show()
app.exec()
مانند قبل، یک QApplication را نمونه سازی میکنیم. سپس یک پنجره ایجاد میکنیم. در اینجا از ابتداییترین نوع QWidget برای آن استفاده کردیم زیرا صرفاً به عنوان یک کانتینر عمل میکند و نمیخواهیم رفتار خاصی داشته باشد. بعد، لایه را ایجاد میکنیم و دو دکمه QPushButton را به آن اضافه میکنیم. در نهایت به پنجره میگوییم که از این لایه (و در نتیجه محتویات آن) استفاده کند؛ مانند اولین برنامه ما، با فراخوانی به show() و app.exec() پایان میدهیم.
البته انواع دیگری از لایهها وجود دارد (مانند QHBoxLayout برای چیدمان موارد در یک ردیف). برای بررسی کلی به مستندات Qt مراجعه کنید.
سبک های سفارشی (Custom styles)
یکی از نقاط قوت Qt پشتیبانی آن از سبکهای سفارشی است. مکانیسمهای زیادی وجود دارد که به شما امکان میدهد ظاهر برنامه خود را سفارشی کنید. این بخش به چند مورد اشاره میکند.
- آموزش طراحی گرافیک نرم افزار بدون کدنویسی با ابزار PyQt Designer
- آموزش پایتون گرافیکی – رابط های گرافیکی پایتون
سبک های داخلی (Built-in styles)
چالش برانگیز راه برای تغییر ظاهر برنامه شما این است که استایل جهانی را تنظیم کنید. تصویر صفحه ویجت های بالا را به خاطر بیاورید:
در اینجا از سبکی به نام Fusion استفاده میکند. اگر به جای آن از سبک ویندوز استفاده میکنید، به صورت زیر به نظر میرسد:
برای اعمال یک استایل، از app.setStyle(…) استفاده کنید:
from PyQt5.QtWidgets import *
app = QApplication([])
app.setStyle(‘Fusion’)
…
سبکهای موجود به پلتفرم شما بستگی دارد، اما معمولاً «Fusion»، «Windows»، «WindowsVista» (فقط برای ویندوز) و «Macintosh» فقط برای Mac هستند.
رنگ های سفارشی(Custom colors)
اگر سبکی را دوست دارید، اما میخواهید رنگهای آن را تغییر دهید (مثلاً به یک تم تیره)، میتوانید از QPalette و app.setPalette (…) استفاده کنید؛ مثلا:
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QPushButton
app = QApplication([])
app.setStyle(‘Fusion’)
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.red)
app.setPalette(palette)
button = QPushButton(‘Hello World’)
button.show()
app.exec()
با این کار رنگ متن در دکمهها به قرمز تغییر میکند:
استایل شیت ها
علاوه بر موارد فوق، میتوانید از طریق استایل شیت ها ظاهر اپلیکیشن خود را تغییر دهید. این آنالوگ Qt از CSS است. برای مثال میتوانیم از این قابلیت برای اضافه کردن فاصله استفاده کنیم:
from PyQt5.QtWidgets import QApplication, QPushButton
app = QApplication([])
app.setStyleSheet(“QPushButton { margin: 10ex; }”)
button = QPushButton(‘Hello World’)
button.show()
app.exec()
سیگنال ها / اسلات ها
Qt از مکانیزمی به نام سیگنال استفاده میکند تا به شما اجازه دهد به رویدادهایی مانند کلیک کردن روی دکمه توسط کاربر واکنش نشان دهید. مثال زیر این موضوع را نشان میدهد. این مکانیزم شامل یک دکمه است که با کلیک کردن، یک جعبه پیام را نشان میدهد:
from PyQt5.QtWidgets import *
app = QApplication([])
button = QPushButton(‘Click’)
def on_button_clicked():
alert = QMessageBox()
alert.setText(‘You clicked the button!’)
alert.exec()
button.clicked.connect(on_button_clicked)
button.show()
app.exec()
به خطی که در بالا برجسته شده است توجه کنید: button.clicked یک سیگنال است و connect(…) به ما اجازه میدهد یک اسلات به اصطلاح روی آن نصب کنیم. این به سادگی تابعی است که هنگام وقوع سیگنال فراخوانی میشود. در مثال بالا، اسلات ما یک جعبه پیام را نشان میدهد.
اصطلاح اسلات هنگام استفاده از Qt از ++C مهم است، زیرا اسلات ها باید به روشی خاص در C++ اعلام شوند. با این حال، در پایتون، هر تابعی میتواند یک اسلات باشد. به همین دلیل، تمایز بین اسلات ها و عملکردهای «عادی» برای ما ارتباط کمی دارد.
برنامه خود را کامپایل کنید
اکنون دانش اولیه برای ایجاد یک رابط کاربری گرافیکی که به ورودی کاربر پاسخ میدهد، دارید. حالا یک برنامه نوشتهاید که روی کامپیوتر شما اجرا میشود؛ اما سؤال اینجاست چگونه آن را به افراد دیگر میدهید تا آنها نیز بتوانند آن را اجرا کنند؟
میتوانید از کاربران برنامه خود بخواهید که Python و PyQt را مانند آنچه در بالا انجام دادیم نصب کنند، سپس کد منبع خود را به آنها بدهید؛ اما این کار بسیار خسته کننده است و معمولاً عملی نیست. آنچه در عوض میشود از آن استفاده کرد نسخهای مستقل از برنامه شما است؛ یعنی یک فایل اجرایی باینری که افراد دیگر میتوانند بدون نیاز به نصب چیزی روی سیستم خود اجرا کنند.
در دنیای پایتون، فرآیند تبدیل کد منبع به یک فایل اجرایی مستقل، فریز نامیده میشود. اگرچه کتابخانههای زیادی وجود دارند که به این مشکل رسیدگی میکنند – مانند PyInstaller، py2exe، cx_Freeze، bbfreze، py2app، … – فریز کردن برنامههای PyQt به طور سنتی یک مشکل به شدت سخت بوده است.
در اینجا باید از یک کتابخانه جدید به نام fbs استفاده خواهیم کرد که به شما امکان میدهد فایلهای اجرایی مستقل برای برنامههای PyQt ایجاد کنید. برای نصب آن دستور را وارد کنید:
pip install fbs
Then, execute the following:
fbs startproject
این دستور از شما چند مقدار را میخواهد:
هنگامیکه دستورrun پیشنهادی را تایپ میکنید، یک پنجره خالی باید باز شود:
درست مانند برنامههایی که قبلاً دیدهایم، این یک برنامه PyQt5 است. کد منبع آن در src/main/python/main.py در فهرست فعلی شما است؛ اما بخش جالب اینجاست: ما میتوانیم از fbs برای تبدیل آن به یک فایل اجرایی مستقل استفاده کنیم!
fbs freeze
این یک باینری مستقل را در پوشه target/MyApp/ دایرکتوری فعلی شما قرار میدهد. میتوانید آن را برای دوستان خود بفرستید (با همان سیستم عامل شما) و آنها میتوانند برنامه شما را اجرا کنند!
(لطفاً توجه داشته باشید که نسخه رایگان fbs فقط از Python 3.5 یا 3.6 پشتیبانی میکند. اگر نسخه دیگری دارید، لطفاً یکی از این نسخههای پایتون پشتیبانی شده را نصب کنید یا fbs Pro را خریداری کنید).
سخن پایانی در مورد آموزش pyqt5
امیدواریم اکنون ایده خوبی در مورد نحوه استفاده از (PyQt و بخشهای مختلف آن) برای نوشتن یک برنامه دسکتاپ با پایتون کسب کرده باشید. همچنین دیدیم که چگونه fbs به شما امکان میدهد فایلهای اجرایی و نصب کنندههای مستقل ایجاد کنید. با دریافت آموزش های فرادرس میتوانید یادبگیرید که چگونه با جزئیات بیشتری برنامه های خود را با استفاده از PyQt ایجاد کنید.
- آموزش رابط گرافیکی PyQt در پایتون Python — کلیک کنید