پیشگفتاری بر PyQt5

در این نوشته می خواهیم بدون نیاز به Qt Designer یک برنامه GUI پایتون بر پایه QtWidgets بنویسیم. در چارچوب Qt ماژولی به نام QtWidgets هست که هر برای ساخت GUI بر پایه پنجره های سنتی به کار می رود. برای نمونه Window Frame در NET یکی از مشهورترین شیوه های برنامه نویسی GUI در سیستم عامل ویندوز است.چارچوب Qt بر پایه سی پلاس پلاس و PyQt بر پایه پایتون، چند سکویی و جدای از سیستم عامل هستند.در Qt ویجت های گوناگون مانند QLabel, QPushButton, QTextEdit, QDateEdit, QTimeEdit و یا QLineEdit هست ولی چیزی که باید بدانیم این است که دو ویجت QWidget و QMainWindow هست که این دو پایه ای برای دیگر ویجت ها هستند. به گفته دیگر، نخست نیاز است تا یک QWidget یا QMainWindow ساخته شده و سپس دیگر ویجت ها روی این دو قرار گیرند. بنابراین:نخست باید یک QWidget یا QMainWindow ساخته شود.در واقع همه ویجت های درون Qt به گونه یک کلاس ساخته شده اند.بنابراین همه ویجت های QWidget, QMainWindow, QLabel, QPushButton, QTextEdit, QDateEdit, QTimeEdit, QLineEdit و دیگران، همگی کلاس هایی در ماژول QtWidgets هستند.ماژول های درون Qt یا PyQt همگی الگوی QtModuleName را دارند، یعنی آغاز نام آنها یک Qt و سپس نام ماژول است ولی نام کلاس ها الگوی QClassName را دنبال می کند، یعنی آغاز نام آنها یک Q و سپس نام کلاس است.پیدا کردن محل قرار گیری PyQt5 نصب شده در VirtualEnvدر زبان سی پلاس پلاس از عبارت include# برای پیوست کردن یک فایل سرآیند به آغاز هر فایل برنامه کمک گرفته می شود. هر فایل سرآیند برای سی پلاس پلاس می تواند تعریف یک کلاس یا دیگر موردها باشد. ولی در پایتون یک ماژول در دید کلی، نام یک پوشه است که درون آن دست کم یک فایل (با پسوند py) هست که درون این فایل می تواند یک تا چندین کلاس یا حتی چندین تابع باشد.اگر دوست داشته باشید تا مسیر چارچوب PyQt5 نصب شده درون محیط مجازی virtualenv را بدانید، می توانید در خود محیط مفسر پایتون، از ماژول os کمک بگیرید. نخست محیط مجازی را به کمک اسکریپت (دستور) activate فعال کنید و سپس دو ماژول os و PyQt5 را پیوست (import) کنید.import os, PyQt5 print(os.path.dirname(PyQt5.__file__))نبودن گونه های داده بومی Qt در PyQtدر زبان سی پلاس پلاس مجموعه ای از گونه های داده (Data Type) مانند Map, Hash, String هست که اینها در چارچوب Qt (و به زبان سی پلاس پلاس) به گونه کلاس هایی پیاده سازی شده اند. برای نمونه کلاس های QMap, QHash و QString درون Qt و برای برنامه نویسی سی پلاس پلاس و نه پایتون پیاده سازی شده اند.بنابراین باید بگوییم که این گونه های داده بومی سی پلاس پلاس، درون PyQt نیستند. درون Qt یک ماژول دیگر به نام QtCore هست که در برابر QtWidgets به حساب می آید. در واقع همه آن چیزی که برای ساخت برای ساخت یک برنامه خط فرمانی (و نه GUI) و همچنین همه کلاس های گونه های داده بومی سی پلاس پلاس مانند QString درون این ماژول تعریف شده اند.در شکل زیر می خواهیم از درون ماژول PyQt5.QtCore کلاس QMap را برای پایتون پیوست کنیم و می بینید که چنین کلاسی در ماژول QtCore برای پایتون نیست. در واقع زبان پایتون خودش همه آن گونه های داده ای که با PyQt مطابق باشند را دارد و نیازی به گونه های سی پلاس پلاس نیست.همچینن یک نمونه دیگر از تفاوت های Qt با PyQt نبود تابع ()qDebug است. برای پایتون تابع ()print بس است و نیازی به ()qDebug نیست. در واقع ()qDebug پیاده سازی شده cout از سی پلاس پلاس برای Qt است. اگر نیاز به ساخت آرایه ها دارید، NumPy پاسخ گوی شما است و اگر نیاز به ساخت لیست دارید، در پایتون گونه list و یا حتی tuple هست.در برابر این مورد، PyQt مجموعه ای از ویژگی ها مانند برنامه نویسی شبکه، برنامه نویسی پایگاه داده، برنامه نویسی برای چند رسانه ای، کار با منابع ذخیره سازی مانند سیستم فایل و دیگر ویژگی ها را همانند Qt فراهم کرده است. همچینن می تونید فایل های گوناگون مانند XML و JSON را بخوانید.برای نمونه در پایتون درایورهایی برای هر یک از پایگاه داده ها هست ولی PyQt یک سری از کلاس ها را در یر ماژولی به نام QtSql فراهم کرده است ولی بازهم دست شما باز است و می توانید دیگر ابزارهای پایتونی مانند خود درایورهای ویژه هر پایگاه داده یا چارچوبی مانند SqlAlchemy را همراه با ویژگی های PyQt به کار ببرید.import PyQt5.QtSqlهمچنین برای راهنمای کلاس ها می توانید به مستندات آنها در سایت Qt سر بزنید و برای آشنایی با ویزگی ها و متدهای کلاس راهنمای همان کلاس را بخوانید. قاعدتا شیوه کد نویسی و نمونه مثال های درون هر راهنما باید الگویی برای برنامه نویسی پایتون و PyQt باشد.دیگر آموزش ها