PyQt چیست و چه کاربردی دارد؟ – از صفر تا صد
- با PyQt به عنوان ابزار اصلی ساخت رابط گرافیکی در پایتون آشنا میشوید.
- نقش ماژولهای QtCore و QtGui در ساختار پروژهها را یاد میگیرید.
- PyQt را بهعنوان پل ارتباطی بین فریمورک Qt و زبان پایتون خواهید آموخت.
- روشهای نصب PyQt روی سیستمعاملهای مختلف را میآموزید.
- با آزمون صحت نصب و رفع خطاهای متداول در PyQt آشنا میشوید.
- با مراحل گامبهگام ساخت پنجره گرافیکی ساده با PyQt آشنا خواهید شد.

PyQt چیست؟

آموزش مطالب پیشرفته پایتون با کمک فرادرس
قبل از اینکه بدانیم PyQt چیست باید مهارت لازم برای کار با پایتون را داشته باشیم. به همین صورت برای کار کردن با پایتون و حل مسائل مربوط به دنیای واقعی نیز باید با تکنیکها و مفاهیم پیشرفته پایتون آشنا شد. بدست آوردن این شناخت به خودی خود از روی منابع مطالعاتی روند بسیار مشکلی است. استفاده از کلاسهای مخصوص و حضوری هم علاوه بر اینکه احتمال پیدا شدن کلاس منطبق با مطلب مورد نیاز ما زیاد نیست، مشکلات دیگری نیز دارد. به عنوان مثال میتوان به فاصله غیر قابل پیشبینی آموزشگاه مناسب تا محل کار یا منزل اشاره کرد. یا اینکه آیا زمان کلاسها با وقت آزاد دانشجویان همخوانی دارد یا نه.

اما فرادرس به عنوان یکی از فعالترین تولیدکنندگان محتوی آموزشی کشور به صورت مستقیم و دائمی در دسترس همه دانشجویان قرار دارد. از هر جای دنیا قابل دسترسی است و در هر زمان میتوان از آموزشهای موجود استفاده کرد. فیلمهای آموزشی پایتون فرادرس یکی از پر مخاطبترین فیلمهای آموزشی و دورههای مربوط به پایتون در کشور هستند. در بخش پایین چند مورد از فیلمهای فرادرس را معرفی کردهایم. البته این فیلمها به منظور پوشش سطوح حرفهای آموزش پایتون طراحی و تولید شدهاند. در صورت نیاز میتوانید بر روی تصویر بالا کلیک کرده و به صفحه اصلی این مجموعه آموزش هدایت شوید. در آنجا دورههای مربوط به سطوح سادهتر یا حرفهای تر پایتون نیز قابل دسترسیاند.
- فیلم آموزش فریمورک تحت وب Django با پایتون در فرادرس
- فیلم آموزش بازی سازی در پایتون با کتابخانه Pygame با فرادرس
- فیلم آموزش ساختمان داده ها با پایتون با فرادرس
- فیلم آموزش برنامه نویسی شی گرا در پایتون با فرادرس
- فیلم آموزش عبارت های منظم Regex در پایتون با فرادرس
ویژگی های PyQt چیست؟
کتابخانه PyQt دارای ویژگیها و ابزارهای مهمی است که باعث شده بین رقبای خود برجسته دیده شود. این فریمورک شامل بیش از ۶۰۰ کلاس است که محدودهای از ویژگیها را مانند موارد زیر پوشش میدهند.
- رابطهای کاربری گرافیکی
- پشتیبانی و ارتباط با پایگاههای داده
- ابزار مخصوص توسعه برنامههای تحت وب یا وبسایتها
- ابزار مخصوص پردازش XML
- شبکهسازی
- و غیره
لایسنس های PyQt
مانند هر ابزار دیگری در دنیای کامپیوتر، قبل از استفاده از این تکنولوژی نیز بسیار مهم است که بدانیم لایسنس PyQt چیست. این کتابخانه با دو لایسنس جداگانه عرضه میشود. نسخهای از این کتابخانه تحت لایسنس GPL و نسخه دیگر با لایسنس تجاری به بازار عرضه شده است. اگر هدف از استفاده PyQt ساخت برنامههای تجاری باشد باید از نسخه تجاری و خریداری شده این پکیج استفاده کنیم. در ضمن توجه کنید که لایسنس PyQt مورد استفاده باید با لایسنس Qt همخوان باشند. همچنین اگر از PyQt با «مجوز عمومی» (The General Public License | GPL) استفاده کنیم، کدهای تولید شده هم باید از این لایسنس پیروی کنند.
در این مطلب از کتابخانه PyQt5 استفاده میکنیم. بنابراین از الان به بعد هر اشارهای به PyQt در متن را به عنوان PyQt5 در نظر بگیرید. PyQt5 بر اساس Qt نسخه ۵ ساخته شده و شامل کلاسهایی برای پشتیبانی از طراحی و استفاده رابط کاربری گرافیکی است.
روش نصب PyQt چیست؟
در زمان نصب PyQt به روی سیستم یا محیط توسعه نرمافزار، روشهای زیادی در دسترس هستند که باید از بین آنها انتخاب کنیم.
- اولین روش نصب و راهاندازی از طریق منبع اصلی و خود سایت RiverBank است. اما این گزینه کمی پیچیده و سخت است، بنابراین ترجیح میدهیم که از انجام این روش صرف نظر کنیم. به هرحال در صورت علاقه به امتحان این روش، بهتر است که به مستندات رسمی کتابخانه رجوع کنید.
- روش بعدی استفاده از Wheel-های باینری است. استفاده از Wheel-ها روش بسیار پرطرفداری برای مدیریت فرایند نصب کتابخانههای پایتون است. البته باید در نظر داشته باشیم که استفاده از Wheel برای نصب PyQt5 فقط از نسخه پایتون ۳.۵ به بالا در دسترس است. برای سیستم عاملهای مختلف مانند لینوکس ۶۴بیتی، macOS و ویندوز ۳۲بیتی و ۶۴بیتی Wheel-های مخصوص به هر کدام وجود دارد.
این Wheel-ها شامل کپیهایی از کتابخانههای Qt با ورژنها بالاتر هستند. بنابراین نیازی به نصب این کتابخانهها به صورت مجزا وجود ندارد.
- روش سوم استفاده از pip است. این روش تقریبا شبیه به استفاده از Wheel کار میکند و معمولا پر طرفدارترین روش بین کاربران پایتون است.
- روش چهارم هم استفاده از سامانههای مدیریت پیکیجهای پایتون مخصوص نسخههای توزیع شده لینوکس و macOS است. برای نصب در ویندوز میتوانیم از فایل باینری «exe.» استفاده کنیم.
- روش پنجم و نهایی نیز استفاده از توزیع آناکوندا به منظور نصب کتابخانه PyQt به روی سیستم است.
در بخش بعد یکی از روشهای بالا را برای نصب کتابخانه PyQt5 به روی کامپیوتر انتخاب کردهایم.
نصب PyQt با استفاده از pip
$ python.exe -m pip install pyqt5 معمولا بدون اعلام شماره نسخه نیز میتوان ماژولها را نصب کرد. در این صورت Pip به صورت پیشفرض، آخرین نسخه از ماژول مورد نظر را به روی سیستم نصب میکند.
تایید عملیات نصب
به محض اینکه ماژول مورد نظر نصب شد، بهتر است که موفقیت عمل نصب را بررسی کنیم. برای انجام این کار، فایل پایتون خالی با نام دلخواه verify.py ساخته و دستور import را به صورتی که در زیر نمایش داده شده، مینویسیم.
$ python verify.pyاگر اجرای فایل پایتون با دستور بالا منجر به برگشت دادن خطا نشد، در نتیجه، ماژول به صورت صحیح و سالم بر روی سیستم نصب شده است. اما در مواردی که خطای استثنا توسط پایتون در خط فرمان برگشت داده شود، باید فرایند نصب ماژول را تکرار کنیم. توصیه شده که در صورت روبهرو شدن با خطا به مستندات رسمی کتابخانه PyQt مراجعه کنیم.
تا به اینجای مطلب با کتابخانه PyQt آشنا شدیم. همچنین دانستیم که بهترین روش نصب PyQt چیست. در ادامه مطلب، اپلیکیشن اولیه و سادهای را با کمک PyQt ایجاد میکنیم.
ساخت اپلیکیشن ساده PyQt
در ادامه مطلب، برای دانستن اینکه سادهترین روش استفاده از PyQt چیست به پیادهسازی مثال سادهای پرداختهایم. از آنجا که در مرحله قبل، موفق شدیم کتابخانه PyQt را به صورت صحیح نصب کنیم، اکنون به راحتی میتوانیم به طراحی و ساخت پروژههای مورد نظر خودمان بپردازیم. در این بخش اپلیکیشنی را برای نمایش عبارت «Hello, World! » با استفاده از پایتون و PyQt ایجاد میکنیم.

بهتر است که در ابتدا، مراحل ساخت این اپلیکیشن را به صورت قدمبهقدم در نظر بگیریم.
- مرحله اول: اپلیکیشن QApplication و همه ویجتهای مورد نیاز را از PyQt5.QtWidgets به محیط کدنویسی خود وارد یا import میکنیم.
- مرحله دوم: شیء نمونهای از کلاس QApplication ایجاد میکنیم.
- مرحله سوم: شیء نمونهای هم از رابط گرافیکی کاربری اپلیکیشن ایجاد میکنیم.
- مرحله چهارم: GUI مربوط به اپلیکیشن را نمایش میدهیم.
- مرحله پنجم: حلقه رویداد یا حلقه اصلی اپلیکیشن را اجرا میکنیم.
برای شروع، فایلی به نام intro.py در پوشه اصلی مربوط به محیط کار ایجاد میکنیم. این فایل همان پروژه مورد نظر خواهد بود. سپس باید Widget-های مورد نیاز خود را نیز به این محیط وارد کنیم.
تکه کدی که در ادامه آمده، عملیات توصیف شده در خط قبل را نمایش میدهد. توجه کنید که این کدها درون فایل intro.py نوشته شدهاند.
همینطور که مشاهده میشود، در قطعه کد بالا کتابخانه sys را در فایل وارد کردهایم. با کمک این کتابخانه میتوانیم وضعیت مربوط به خروج از اپلیکیشن را مدیریت کنیم. سپس کلاسها و «ویجتها» (Widgets) مورد نیاز را مانند QApplication و QLabel و QWidget از ماژول QtWidgets به محیط کدنویسی خود وارد کردیم.
توجه کنید که خود ماژول QtWidgets زیر مجموعهای از کتابخانه PyQt5 است. برای همین در خط کدهای مربوط به import به صورت PyQt5.QtWidgets نوشته میشود.
در قطعه کد بالا، از کلاس QApplication نمونهای به نام myApp ساختهایم. از آنجا که شیء myApp مقداردهی اولیه مربوط به سایر اشیا را هم باید مدیریت کند، لازم است که قبل از هر شیء مرتبط با GUI دیگری ایجاد شود. شیء ساخته شده از کلاس QApplication با آرگومانهای عمومی ارسال شده از طرف خط فرمان هم میتواند کار کند. در نتیجه در هنگام ایجاد myApp لازم است که مانند کد بالا sys.argv را به عنوان پارامتر به کلاس QApplication ارسال کنیم.
توجه: sys.argv شامل لیستی از آرگومانها است. این آرگومانها را میتوان از خط فرمان به اسکریپت پایتون ارسال کرد. اگر اپلیکیشن طراحی شده نیازی به دریافت هیچ آرگومانی از خط فرمان نداشته باشد، میتوانیم بهجای sys.argv از لیست خالی استفاده کنیم. در واقع شیء myApp را به صورت myApp = QApplication([]) تعریف میکنیم.

مرحله بعدی شامل ساخت «رابط کاربری گرافیکی» (GUI) برای اپلیکیشن است. برای این مثال GUI مورد نظر، بر اساس QWidget ساخته خواهد شد. QWidget کلاس پایهای برای همه اشیا مربوط به رابط کاربری در PyQt است.
در تکه کد پایین فرایند ساخت GUI را نمایش دادهایم. توجه کنید که این کد هم داخل فایل intro.py نوشته شود.
برای توضیح کد بالا، لازم است اشاره کنیم که در خط اول نمونهای از کلاس QWidget ایجاد کردهایم. شیء ساخته شده از کلاس QWidget همه ویژگیهایی را فراهم میکند که برای ساخت پنجره یا فرم اپلیکیشن نیاز داریم. با کمک گرفتن از تابع setWindowTitle() در خط دوم، تیتر مورد نظر خود را به پنجره ساخته شده اضافه کردیم.
سپس از تابع setGeometry() استفاده کردیم تا اندازه دلخواه خود برای پنجره و مکان قرارگیری آن در بر روی صفحه نمایش را تعریف کنیم. دو پارامتر اول تابع نشاندهنده مختصات x و y هستند که محل قرارگیری پنجره بر روی صفحه نمایش را نشان میدهند. پارامترهای سوم و چهارم هم، عرض و ارتفاع پنجره ساخته شده را مشخص میکنند.
هر اپلیکیشن کاربردی گرافیکی به ویجتهای مخصوص به خود نیاز دارد. در اینجا شیء از کلاس QLabel به نام firstMsg ساختهایم. با کمک این شیء بر روی پنجره اپلیکیشن ساخت شده پیام مورد نظر خود را نمایش میدهیم. اشیاء QLabel میتوانند متنهای از جنس HTML را نیز بپذیرند. پس برای اینکه متن خود را به شکل هِدِر h1 در پنجره باز شده نمایش دهیم، از عنصر HTML به صورت «<h1>Hello, World! Welcome to Faradars Blog.</h1>» استفاده میکنیم.
در نهایت هم برای قرار دادن firstMsg در مختصات (60, 15) پنجره اپلیکیشن از تابع move() استفاده کردیم.
توجه: در کتابخانه PyQt5 میتوانیم از هر ویجتی - زیر کلاسهایی از QWidget - به عنوان پنجره سطح بالا یا حتی دکمه یا برچسبی برای پنجره استفاده کنیم. تنها شرط مسئله این است که نباید هیچ والدی به آن ارسال شود. وقتی که از ویجتی به این شکل استفاده میکنیم، PyQt5 به صورت خودکار، نوار تیتری برای آن فراهم کرده و آن را به پنجره معمولی تبدیل میکند.
روابط والد و فرزندی با دو قانون مکمل یکدیگر بهکار برده میشوند.
- ویجتی که والد ندارد پنجره اصلی یا سطح بالا است.
- ویجتی که والد دارد - همیشه والد هر ویجت نیز باید ویجت باشد - درون والدین خودش ذخیره شده و نمایش داده میشود.
همچنین با کمک والدینی که مالک فرزندان خود هستند، این نوع از رابطه، رابطه مالکیت را نیز تعریف میکند. مدل مالکیت در فریمورک PyQt5 تضمین میکند که اگر والدی را حذف کردیم، به عنوان مثال پنجره سطح بالا، همه فرزندان آن والد یا ویجتهای مرتبط با آن پنجره نیز حذف شوند.
باید تضمین کنیم که هر شیء QWidget به استثنای پنجرههای سطح بالا دارای والد باشند. با انجام این کار از نشت حافظه جلوگیری میکنیم. نشت حافظه به مدیریت تخصیص حافظه به صورت غیر صحیح گفته میشود.

تا اینجای کار پیادهسازی مرحله سوم را هم به پایان رسانیدهایم. در ادامه مطلب، دو مرحله باقی مانده را پیادهسازی میکنیم. بعد از پایان پیادهسازیها میبینیم که نتیجه اجرای پروژهای ساده در PyQt چیست.
کدهای زیر هم ادامه همان پروژه هستند. پس باید در امتداد کدهای قبلی در فایل intro.py نوشته شوند.
در تکه کد بالا میبینیم که تابع show() برای اجرا بر روی شیء myWindow فراخوانی شده است. این تابع در زمان فراخوانی، رویدادی را برای مدیریت رنگ پنجره برنامهریزی میکند. به این معنی که تابع show() رویداد جدیدی را به صف رویدادهای اپلیکیشن اضافه میکند.
توجه : «رویداد رنگ» (Paint Event) درخواستی برای رنگآمیزی ویجتهایی است که با ترکیب یکدیگر رابط کاربری گرافیکی را ایجاد میکنند.
در نهایت هم «حلقه رویدادِ» (Event Loop) اپلیکیشن را با فراخوانی تابع myApp.exec_() مقداردهی میکنیم. در اینجا فراخوانی تابع exec_() در فراخوانی تابع sys.exit() پیچیده شده است. این اتفاق به کاربران اجازه میدهد که به صورت تمیزی از پایتون خارج شوند. علاوه بر آن در زمان به پایان رسیدن کار اپلیکیشن - بسته شدن آن - منابع حافظه اشغال شده نیز آزاد میشوند.
فایل intro.py را با کمک فرمان زیر اجرا میکنیم.
خروجی حاصل از اجرای این فایل به صورت تصویر زیر به کاربر نمایش داده میشود.

در خروجی بالا، اپلیکیشن طراحی شده، پنجرهای را بر اساس QWidget نمایش میدهد. در این پنجره پیغام مورد نظرمان نمایش داده شده است. برای این نمایش پیام، از QLabel استفاده کردیم در نتیجه پیام نوشته شده با فرمت دستور داده شده ظاهر شد. با کمک ابزار QLabel موفق شدیم پیام مورد نظر خود را با فرمت HTML نمایش دهیم.
آموزش های تکمیلی پایتون با فرادرس
بعد از اینکه مهارتهای خود را در کار با زبان برنامهنویسی پایتون تا حد مناسبی ارتقا دادیم، برای ادامه افزایش توانایی و پاسخ به این سوال که چه بخشهایی از دانش برنامهنویسی خود را باید تکمیل کنیم، بهترین کار بررسی دورههای حرفهایتر است. برای مثال، استفاده از متدهای رشته در پایتون برای پیادهسازی پروژههای عملی باعث نهادینه شدن دانش مربوط به کار با رشتهها در برنامهنویس میشود. بنابراین، بهترین روش برای تقویت تواناییها و ترکیب تکنولوژیهای مختلف در برنامهنویسی انجام پروژههای هرچه نزدیکتر به سناریوهای دنیای واقعی است.

با این هدف، وبسایت آموزشی فرادرس، فیلمهای بسیار خوبی درباره آموزش پروژه محور انواع زبانهای برنامهنویسی تولید و ارائه کرده است. در این بخش از مطلب، چند مورد از این فیلمها را در ارتباط با پروژههای واقعی زبان برنامهنویسی پایتون معرفی کردهایم.
- فیلم آموزش پیش بینی نوسانات بازار سهام با هوش مصنوعی در پایتون با فرادرس
- فیلم آموزش بازی سازی در پایتون با کتابخانه Pygame از فرادرس
- فیلم آموزش طراحی سایت و وب اپلیکیشن با فریمورک Django در فرادرس
- فیلم آموزش مقدماتی ساخت ربات تلگرام با پایتون با فرادرس
- فیلم آموزش پروژه محور پایتون درباره ساخت دستیار صوتی، از طراحی توابع تا اجرای برنامه با فرادرس
در صورت تمایل به دیدن فیلمهای بیشتر با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی هدایت شده و گزینههای متنوع موجود را مشاهده کنید.
جمع بندی
در این مطلب ابتدا به سوال PyQt چیست پاسخ داده و سپس چند مورد از ویژگیهای PyQt را بیان کردیم. در ادامه روش نصب و شروع کار با این کتابخانه را با مثالهای کدنویسی شده نشان دادیم و در نهایت هم مثال کوچکی از نمایش پنجره گرافیکی را با پیغام دلخواه پیادهسازی کردیم. مثال آخر به صورت قدمبهقدم، با کدنویسی و توضیحات کامل مربوط به هر مرحله نمایش داده شده است.
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













