تخفیف ویژه زمستانه پی استور

تا 60 درصد تخفیف

شامل پروژه‌ها و دوره‌های آموزشی
روز
ساعت
دقیقه
ثانیه
آخرین فرصت‌ها

با خرید اشتراک ویژه ، با هزینه بسیار کمتر به فایل های پاورپوینت دسترسی داشته باشید!

آموزش pyqt5 به زبان ساده — گام به گام و تصویری

آموزش pyqt5 به زبان ساده — گام به گام و تصویری
اجازه بدهید در ابتدا با مفهوم رابط گرافیکی آشنا شویم. تصور کنیم شما یک برنامه‌نویس هستید و در محیط کنسول که مستطیلی سیاه رنگ هست و خطوط سفید رنگی بر روی آن نوشته می‌شود برنامه‌ای نوشته‌اید و از نتیجه کار خود بسیار خوشنود هستید. حالا فرض کنیم فردی که برنامه‌نویس نیست و می‌خواهد از برنامه شما استفاده کند، آیا فکر می‌کنید این محیط سیاه رنگ با این شکل و ظاهر برای او نیز جذاب خواهد بود! مسلماً نه.

فهرست مطالب

مقدمه

پس اگر می‌خواهیم کاربران برنامه‌ای که نوشتیم، فقط برنامه‌نویسان نباشند و افراد عادی هم بتوانند از آن استفاده کنند و راضی باشند باید به شکل ظاهر آن توجه کنیم و آن را بصورت کاربر پسند و زیبا ایجاد کنیم. ماژول‌های زیادی برای این کار وجود دارند مخصوصاً برای افرادی که از از زبان برنامه نویسی پایتون استفاده می‌کنند، یکی از این ماژول‌ها همین موضوع بحث ما یعنی pyqt می‌باشد. حالا در ادامه به آموزش pyqt5 و توضیح در مورد آن می‌پردازیم.

pyqt5 توسط ریوربنک کامپیوتینگ (Riverbank Computing) به عنوان آخرین نسخه ابزار GUI (رابط کاربری گرافیکی) تولید شد. در حقیقت pyqt5 کتابخانه‌ای است که به شما امکان می‌دهد از چارچوب Qt GUI Python استفاده کنید. به زبانی دیگر می‌توان گفت که pyqt5 ترکیبی از کتابخانه QT و پایتون است که برای برنامه‌نویسان نرم‌افزار، که علاقه‌مند به تولید برنامه‌های گرافیکی هستند قابل استفاده است. حتی ایجاد یک installer برای برنامه شما را نیز پوشش می‌دهد.

PyQt ‌با تمام سیستم‌های عامل محبوبی که می‌شناسیم از قبیل ویندوز، لینوکس، mac سازگاری دارد و با استفاده از Python3 و Qt در ایجاد رابط کاربری گرافیکی در این سیستم‌عامل‌ها، بکار می‌رود. این رابط گرافیکی دارای مجوز دوگانه است یعنی تحت لیسانس GPL و لیسانس تجاری در دسترس می‌باشد. PyQt5 ‌در نسخه‌هایی که پایتون قدیمی‌تر از ۲.۶ دارند پشتیبانی نمی‌شود.

ممکن است بعضی وقت‌ها (Py)Qt4 را در وب پیدا کنید، ولی این نسخه یک نسخه قدیمی است و دیگر پشتیبانی نمی‌شود. برای اینکه از این آموزش pyqt5 بتوانید استفاده کنید بهتر است که آشنایی مقدماتی با اصطلاحات برنامه‌نویسی و زبان پایتون داشته باشید.

آموزش pyqt5

ماژول‌های پرکاربرد PyQt API

PyQt API مجموعه ای از ماژول‌ها است که شامل تعداد زیادی کلاس و توابع پایتون می‌باشد. در حالی که ماژول QtCore دارای عملکرد غیر GUI برای کار با فایل و دایرکتوری و غیره است، ماژول QtGui شامل تمام کنترل‌های گرافیکی می‌باشد. علاوه بر این، ماژول‌هایی برای کار با XML (QtXml)، SVG (QtSvg) و SQL (QtSql) و غیره وجود دارند. در ادامه لیستی از ماژول‌های پرکاربرد را باهم می‌بینیم:

  • QtCore : کلاس‌های اصلی که GUI نیستند و توسط ماژول های دیگر استفاده می شود.
  • QtGui : اجزای رابط کاربری گرافیکی.
  • QtMultimedia : کلاس‌های برنامه‌نویسی چند رسانه‌ای سطح پایین .
  • QtNetwork : کلاس‌های برنامه‌نویسی شبکه.
  • QtOpenGL : کلاس‌های پشتیبانی OpenGL.
  • QtScript : کلاس‌های ارزیابی اسکریپت‌های Qt.
  • QtSql : کلاس‌های یکپارچه سازی پایگاه داده با استفاده از SQL.
  • QtSvg : کلاس‌های نمایش محتویات فایل‌های SVG.
  • QtWebKit : کلاس‌های رندر و ویرایش HTML.
  • QtXml : کلاس‌های مدیریت XML.
  • QtWidgets : کلاس‌هایی برای ایجاد رابط‌های کاربری کلاسیک به سبک دسکتاپ (desktop-style).
  • QtDesigner : کلاس‌های توسعه Qt Designer.

مزیت ماژول pyqt5 نسبت به دیگر ماژول‌ها

کلاس‌های موجود در این ماژول به قدری زیاد است که همین می‌تواند دلیل خوبی برای استفاده این فریم وورک نسبت به سایرین باشد. اما designer برنامه‌ای که برای طراحی، توسعه یافته است بهترین مزیت این ماژول محسوب می‌شود. PyQt با یک ابزار سازنده رابط کاربری گرافیکی به نام Qt Designer ارائه می‌شود. با استفاده از رابط drop & drag ساده آن، یک رابط کاربری گرافیکی را می‌توان به سرعت بدون نیاز به نوشتن کد ساخت. با این حال، این Designer یک IDE مانند ویژوال استودیو نیست. از این رو، Qt Designer امکان اشکال زدایی و ساخت برنامه را ندارد.

PyQt5 از ترکیب زبان برنامه‌نویسی پایتون و فریمورک Qt بهره می‌برد و امکان ساخت برنامه‌های با رابط کاربری زیبا و حرفه‌ای را در پایتون فراهم می‌کند. در لینک زیر برای ارائه در این زمینه پاورپوینت PYQT5 در پایتون با پسوند pptx در ۲۰ اسلاید قرار داده شده است.

جدیدترین‌ها در بحث آموزش pyqt5

همان‌طور که قبلا گفتیم pyqt5 در نسخه‌های قدیمی‌تر از نسخه ۲.۶ پایتون پشتیبانی نمی‌شود. همچنین PyQt5 از متد ()connect از کلاس QObject که ‌‌برای اتصال بین سیگنال و slot بکار می‌رود پشتیبانی نمی‌کند. بنابراین کد زیر دیگر بکار نمی‌رود.

QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

و فقط syntax زیرتعریف شده است.

widget.signal.connect(slot_function)

کلاس‌هایی که در ماژول QtGui قبلی تعریف شده بودند اکنون در ماژول‌های QtGui، QtPrintSupport و QtWidgets توزیع شده‌اند. در کلاس جدید QFileDialog، متد ()getOpenFileNameAndFilter  با ()getOpenFileName و متد ()getOpenFileNamesAndFilter با ()getOpenFileNames و ()getSaveFileNameAndFilter با ()getSaveFileName جایگزین شده است. ضمناً امضاهای قدیمی‌تر این روش‌ها نیز تغییر کرده است. قابل ذکر است که pyqt5 قوانینی برای تعریف کلاس که خودش زیر کلاسی برای بیش از یک کلاس Qt باشد، ندارد.

ابزار pyuic5 (که برای تولید کد پایتون از فایل XML Designer است) از پرچم pyqt3-wrapper پشتیبانی نمی‌کند. pyrcc5 نیز از پرچم‌های py2 و py3 پشتیبانی نمی‌کند. pyqt5 همیشه بصورت اتوماتیک تابع ()sip.setdestroyonexit را فراخوانی کرده و destructor زبان ++c مربوط به تمامی موارد پیچیده آن را، نیز فرا می‌خواند.

نصب pyqt5 در ویندوز

در این بخش از آموزش pyqt5 به نصب pyqt5 در ویندوز می‌پردازیم. قابل ذکر است که pyqt5 برای هر دو نسخه ۳۲ بیتی و ۶۴ بیتی که با پایتون ۳.۵ به بالاتر سازگاری دارند، وجود دارد. راهی که برای نصب آن توصیه می‌کنیم استفاده از روش نصب پکیج در پایتون بصورت pip می‌باشد.

pip3 install PyQt5

نصب pyqt5 در آموزش pyqt5

برای نصب ابزارهای توسعه از قبیل Qt Designer برای پشتیبانی از pyqt5 دستور زیر را استفاده می‌کنیم.

pip3 install pyqt5-tools

آموزش pyqt5 - نصب pyqt5-tools

در ادامه آموزش pyqt5 بهتر است قبل از هر کاری با مراحل ایجاد یک برنامه رابط کاربری گرافیکی ساده با استفاده از PyQt آشنا شویم این مراحل شامل گام‌های زیر است:

  • ماژول‌های QtCore، QtGui و QtWidgets را از بسته (package) PyQt5 وارد می‌کنیم.
  • یک شیء برنامه از کلاس QApplication ایجاد می‌کنیم..
  • یک شیء QWidget، پنجره سطح بالایی را ایجاد می کند. شیء QLabel را در آن اضافه می‌کنیم..
  • عنوان برچسب را به عنوان “Hello World” تنظیم می‌کنیم.
  • موقعیت و اندازه پنجره را با متد ()setGeometry تعریف می‌کنیم.
  • حلقه اصلی برنامه را از طریق متد ()_app.exec وارد می‌کنیم.
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def window():
   app = QApplication(sys.argv)
   w = QWidget()
   b = QLabel(w)
   b.setText("Hello World!")
   w.setGeometry(100,100,200,50)
   b.move(50,20)
   w.setWindowTitle("PyQt5")
   w.show()
   sys.exit(app.exec_())
if __name__ == '__main__':
   window()

همچنین امکان توسعه یک solution شیء گرا از کد بالا وجود دارد. برای اینکار مراحل زیر را انجام می‌دهیم:

  • ماژول‌های QtCore، QtGui و QtWidgets را از بسته PyQt5 وارد می‌کنیم.
  • یک شیء برنامه از کلاس QApplication ایجاد می‌کنیم.
  • کلاس پنجره را بر اساس کلاس QWidget اعلام می‌کنیم
  • یک شیء QLabel اضافه می‌کنیم و عنوان برچسب را به عنوان “Hello world” تنظیم می‌کنیم.
  • اندازه و موقعیت پنجره را با متد ()setGeometry تعریف می‌کنیم.
  • حلقه اصلی برنامه را با روش ()_app.exec وارد می‌کنیم.

[/vc_column_text][vc_column_text]در ادامه کد کامل solution  شیء‌گرا آمده است:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class window(QWidget):
   def __init__(self, parent = None):
      super(window, self).__init__(parent)
      self.resize(200,50)
      self.setWindowTitle("PyQt5")
      self.label = QLabel(self)
      self.label.setText("Hello World")
      font = QFont()
      font.setFamily("Arial")
      font.setPointSize(16)
      self.label.setFont(font)
      self.label.move(50,20)
def main():
   app = QApplication(sys.argv)
   ex = window()
   ex.show()
   sys.exit(app.exec_())
if __name__ == '__main__':
   main()

خروجی برنامه به شکل زیر است:

خروجی تکه کد pyqt5 در آموزش pyqt5

استفاده از Qt Designer

pyqt installer یا نصب کننده pyqt همراه با یک سازنده رابط کاربری گرافیکی بنام Qt Designer ارائه می‌شود. با استفاده از رابط و محیط drop & drag آن می‌توان به سادگی یک رابط کاربری گرافیکی را بدون احتیاج به نوشتن کد ایجاد کرد. خوب الان برنامه Qt Designer را که بخشی از ابزارهای توسعه بوده و در پوشه اسکریپت‌های محیط مجازی نصب می‌شود را شروع می‌کنیم. اگر بالاتر دستور pip install pyqt5-tools درست نصب شده باشد در قسمت Start ویندوز اگر designer را جستجو کنید برایتان ظاهر خواهد شد.

qtdesigner در منوی استارت ویندوز

کافیست کلیک کنید وارد آن شوید. محیط آن به شکل زیر است.

محیط Qtdesigner

سپس می توانید ویجت‌های مورد نیاز را از کادر ویجت در سمت چپ بکشید و رها کنید. همچنین می‌توانید به ویژگی‌های ویجت که روی فرم گذاشته شده است، مقدار اختصاص دهید.

محیط کار qt designer

فرم طراحی شده با عنوان test.ui ذخیره می شود. این فایل که یک رابط کاربری است، شامل نمایش XML از ویجت‌ها و ویژگی‌های مربوط به آنها در طراحی است که این طرح با استفاده از ابزار خط فرمان pyuic5 به معادل پایتون آن ترجمه می‌شود. این ابزار یک بسته برای ماژول uic از مجموعه QT toolkit است. نحوه استفاده از pyuic5 به‌صورت زیر است:

pyuic5 -x test.ui -o test.py

در دستور بالا، سوئیچ -x مقدار کمی کد اضافی را به اسکریپت پایتون تولید شده (از XML) اضافه می‌کند تا به یک برنامه مستقلی که خود خود به خود اجرا شود، تبدیل شود.

if __name__ == "__main__":
   import sys
   app = QtGui.QApplication(sys.argv)
   Dialog = QtGui.QDialog()
   ui = Ui_Dialog()
   ui.setupUi(Dialog)
   Dialog.show()
   sys.exit(app.exec_())

اسکریپت پایتون بعد از اجرا کادر محاوره‌ای زیر را نمایش می‌دهد.

python test.py

نتیجه حاصل از qtdesigner

حالا کاربر در فیلدهای مورد نظر می‌تواند مقادیری را وارد کند ولی با کلیک بر روی دکمه add هیچ عملی اتفاق نمی‌افتد زیرا به هیچ عملکردی مرتبط نشده است.

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

ابزارک‌ها (widgets) به عنوان منابع چنین رویدادهایی در ساخت رابط کاربری گرافیکی به کار می‌روند. که هر ابزارک از کلاس QObject مشتق شده است و به گونه‌های طراحی شده است که در پاسخ به یک یا چند رویداد “سیگنال” منتشر کند. البته این سیگنال به تنهایی کار خاصی انجام نمی‌دهد مگر اینکه به یک Slot متصل شده باشد. این slot می‌تواند هر تابع پایتونی با قابلیت فراخوانی باشد. در ادامه آموزش pyqt5 به استفاده از این مفاهیم می‌پردازیم.

استفاده از ویرایشگر سیگنال/اسلات Qt Designer

برای شروع، یک فرم ساده با کنترل LineEdit و PushButton طراحی می کنیم.

فرم 2 در qtdesigner

فرم به نحوی طراحی شده است که با کلیک بر روی دکمه محتوای نوشته شده در QLineEdit  پاک شود. ابزارک QLineEdit دارای متدی به نام ()clear است. بنابراین، سیگنال کلیک مربوط به دکمه باید به متد ()clear مربوط به کادر متن متصل شود. برای شروع، Edit signals/slots را از منوی Edit انتخاب کنید (یا F4 را فشار دهید). سپس دکمه را با ماوس هایلایت کرده و مکان نما را به سمت textbox بکشید.

متد clear()

هنگامی که ماوس آزاد می شود، یک کادر که سیگنال‌های دکمه و متدهای slot را نشان می‌دهد، نمایش داده می‌شود. سیگنال کلیک و متد ()clear را انتخاب می‌کنیم.

کادر مکالمه سیگنال و متدهای اسلات

پنجره Signal/Slot Editor در پایین سمت راست، نتیجه را نشان می دهد. همان‌طور که در کد زیر نشان داده شده است، کدهای UI و Build و Python را از فایل Ui ذخیره می‌کنیم.

pyuic5 -x signalslot.ui -o signalslot.py

کد پایتون تولید شده با عبارت زیر، ارتباط بین سیگنال و slot را خواهد داشت.

self.pushButton.clicked.connect(self.lineEdit.clear)

signalslot.py را اجرا می‌کنیم و متنی را در LineEdit وارد می‌کنیم. در صورت فشار دادن دکمه، متن پاک می‌شود.

ساخت ارتباط signal – slot

به جای استفاده از Designer، می‌توانید مستقیماً با دنبال کردن syntax زیر، اتصال signal – slot را برقرار کنید.

widget.signal.connect(slot_function)

فرض کنید با کلیک روی یک دکمه، تابعی فراخوانی شود. حالا سیگنال کلیک شده باید به یک تابع قابل فراخوانی متصل شود. در هر یک از تکنیک های زیر می توان این کار را انجام داد. در ادامه آموزش pyqt5 یک مثال را بررسی می‌کنیم.

button.clicked.connect(slot_function)

مثالی از فراخوانی توابع

در مثال زیر، دو شیء QPushButton (button1 و button2) در پنجره QDialog اضافه شده است. ما می خواهیم با کلیک بر روی button1 و button2 توابع ()button1_clicked و ()button2_clicked را فراخوانی می‌کنیم. هنگامی که روی button1 کلیک می‌شود، سیگنال ()clicked به تابع ()button1_clicked متصل می‌شود.

bottun1.clicked.connect(bottun1_clicked())

و هنگامی که روی button2 کلیک می‌شود، سیگنال ()clicked به تابع ()button2_clicked متصل می‌شود.

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   Button1 = QPushButton(win)
   Button1.setText("Button1")
   Button1.move(50,20)
   Button1.clicked.connect(Button1_clicked)
   
   Button2 = QPushButton(win)
   Button2 .setText("Button2")
   Button2 .move(50,50)
   Button2 .clicked.connect(Button2_clicked)
   
   win.setGeometry(100,100,200,100)

   win.setWindowTitle("PyQt5")
   win.show()
   sys.exit(app.exec_())

def Button1_clicked():
   print ("Button 1 clicked")

def Button2_clicked():
   print ("Button 2 clicked")

if __name__ == '__main__':
   window()

کد بالا خروجی زیر را دارد:

خروجی

Button 1 clicked
Button 2 clicked

سخن آخر در بحث آموزش pyqt5

در این مقاله به آموزش pyqt5 پرداختیم. pyqt5 ترکیبی از کتابخانه QT و پایتون است که به برنامه‌نویسان این امکان را می‌دهد تا با استفاده از آن برنامه‌های کاربردی با رابط گرافیکی کاربر پسند ارائه کنند. pyqt5 دارای کلاس‌های بی‌شماری هست و مهم‌تر از همه با یک سازنده رابط کاربری گرافیکی (GUI) بنام QT Designer ارائه می‌شود که کاربرد را از زحمت کد نویسی راحت کرده و محیطی گرافیکی برای او فراهم می‌کند.

در این مقاله محیط QT Designer و نحوه کار با آن در حد آشنایی در اختیار علاقه‌مندان قرار داده شد و سعی کردیم که تا حدی شما را با pyqt5 و QT Designer آشنا کنیم. از اینکه تا انتهای مقاله ما را همراهی کردید از شما سپاسگزاریم. مشتاقانه منتظر نظرات و پیشنهادات شما عزیزان هستیم.

4 پاسخ

  1. سلام برنامه جمع دو عدد را چطور در پایتون تکمیل کنیم. من متوجه نشدم.

    python test.py
    

    بعد از این خط برنامه اجرا شد ولی جمع نکرد
    تغییری باید داخل کد test.py اعمال بشه

    1. سلام
      بله با این کتابخانه تقریبا میتوان هر نوع طراحی گرافیکی از جمله ماشین حساب ساخت.

دیدگاهتان را بنویسید

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