پای‌کیوت

**پای‌کیوت** یک اتصال پایتون چند سکویی است. این یکی از جایگزین‌ها برای برنامه‌نویسی رابط گرافیکی کاربر در پایتون به‌جای تی‌کی‌اینتر است که با پایتون همراه است. PyGTK و wxpython سایر گزینه‌های جایگزین هستند. پای‌کیوت مثل کیوت یک نرم‌افزار آزاد هست. پای‌کیوت یک افزونه پایتون می‌باشد.

پای‌کیوت توسط شرکت رایانه‌ای ریوربانک بریتانیا توسعه داده می‌شود. همچنین این مجموعه تحت شرایط مشابه نسخه‌های قدیمی‌تر از ۴٫۵؛ به این معنی که انواع مجوزها از جمله اجازه‌نامه عمومی همگانی گنو (GPL) و مجوز تجاری، اما نه اجازه‌نامه عمومی کمتر گنو (LGPL). پای‌کیوت از لینوکس و سایر یونیکسها، و همچنیناواس ده و ویندوز مایکروسافت پشتیبانی می‌کند.

پای‌کیوت پیاده‌سازی نزدیک ۴۴۰ کلاس و بیش از ۶٫۰۰۰ توابع و متد از جمله:
* مجموعه قابل توجهی از ابزارهای رابط گرافیکی کاربر
* کلاسهایی برای دسترسی به پایگاه داده‌ها (اُدی‌بی‌سی، مای‌اس‌کیوال، پست‌گر اس‌کیوال، اوراکل)
* QScintila، ویجت Scintila مبتنی بر ویرایشگر متن غنی
* ویجت آگاه اطلاعات که به صورت خودکار از یک پایگاه اطلاعاتی جمعیت
* تجزیه کننده XML
* پشتیبانی از SVG
* امکان استفاده از CSS برای دیزاین نرم‌افزار
* کلاس‌های برای تعبیه کنترل اکتیوایکس بروی ویندوز (فقط در نسخه تجاری)

در اوت ۲۰۰۹ (مرداد۱۳۸۸)، نوکیا، که اکنون مالک ابزار کیوت است، PySide را منتشر کرد، که قابلیت‌های مشابه‌ای، اما تحت LGPL ارائه می‌دهد. پس از ناکامی در رسیدن به توافق با شرکت رایانه‌ای Riverbank برای تغییر شرایط صدور مجوز که شامل LGPL به عنوان جایگزین می‌باشد.

## اجزای اصلی پای‌کیوت
PyQt شامل زیرمجموعه ای از ماژول‌های مختلف می‌باشد که هر بخشی وظیفه خاصی را بر عهده دارد.

از بخش‌های مهم PyQt می‌توان موارد زیر را نام برد:
* **ماژول QtCore** شامل کلاس‌های غیر رابط گرافیکی کاربر، از جمله حلقه رویداد و سیگنال‌های کیوت و مکانیزم حافظه. همچنین شامل پلت فرم انتزاعی مستقل برای یونیکد، موضوعات، فایل‌های نقشه‌برداری، حافظه مشترک، عبارت منظم، و تنظیمات نرم‌افزار و کاربر می‌باشد.
* **ماژول QtGui** شامل اکثر کلاسهای رابط کاربری گرافیکی. این خدمات عبارتند از تعداد جدول، درخت و کلاس فهرست بر اساس الگوی طراحی کنترل-نمایش-ماژول است. همچنین ویجت canvas 2D که قادر به ذخیره‌سازی هزاران اقلام از جمله ویجت عادی ارائه شده‌است.
* **ماژول QtNetwork** این ماژول شامل کلاس‌هایی برای ساخت برنامه‌های سمت سرور یا کلاینت (سرویس دهنده و سرویس گیرنده) بر پایه پروتکل‌های TCP یا UDP می‌باشد. همچنین این بخش شمال کلاس‌های کلاینت FTP, HTTP و همچنین جستجوی DNS می‌باشد.
* **ماژول QtOpenGL**این ماژول امکان ایجاد و کار بر روی تصاویر سه بعدی با استفاده از اپن جی ال را فراهم می‌کند.
* **ماژول QtScript** با استفاده از این ماژول برنامه‌های نوشته شده قادر به اجرا اسکریپت‌های جاوا خواهند بود. در حقیقت با استفاده از این روش امکان توسعه و اسکریپت‌نویسی برای کاربران فراهم می‌شود.
* **ماژول QtSql**وظیفه این ماژول ایجاد ارتباط با پایگاه داده‌های مبتنی بر SQL می‌باشد. همچنین این ماژول شامل مدیر دیتابیس SQLite می‌باشد.
* **ماژول QtSvg**این ماژول شامل توابعی برای نمایش فایل‌هایی با فرمت SVG یا Scalable Vector Graphics است.
* **ماژول QtTest**این ماژول شامل توابعی برای اعمال تست بر روی اجزا برنامه نوشته شده با پایتون و کیوتی می‌باشد.
* **ماژول QtXml**این ماژول شامل کلاس‌هایی می‌باشد که رابط‌های SAX و DOM را برای تجزیه کننده XML کیوتی فراهم می‌کنند.
* **ماژول QtAssistant**با استفاده از این ماژول می‌توان نرم‌افزار Qt Assistant را در برنامه نوشته شده با پایتون و کیوتی درونی سازی کرده و در نتیجه مستندات برنامه را به همراه آن و بدون نیاز به ایجاد بخشی جداگانه در خود برنامه درونی سازی نمود.
* **ماژول QtDesigner**توسط این ماژول امکان توسعه طراح کیوتی توسط PyQt فراهم خواهد شد. برای مثال می‌توان افزونه یا یک عنصر جدید در PyQt ایجاد و از آن همانند سایر اشیا گرافیکی (Widget) در محیط طراح استفاده کرد.
* **ماژول QAXContainer**با استفاده از این ماژول برنامه نوشته شده قادر خواهد بود به اشیا COM و اکتیو ایکس (ActivX) ارتباط برقرار کند.
* **ماژول Qt**این ماژول شامل تمامی موارد ذکر شده در بالا می‌باشد. با اضافه کردن این ماژول دیگر نیازی نیست برنامه‌نویس ماژول شامل تابع مورد نیاز خود را بداند. از معایب این روش لود شدن همه فریم ورک کیوتی می‌باشد که باعث اشغال زیاد حافظه می‌گردد.
* **ماژول uic**این ماژول شامل کلاس‌هایی برای کار با فایل‌های ui می‌باشد که توسط طراح (Designer) کیوتی ایجاد می‌گردد، می‌باشد.

## ابزار
PyQt همچنین شامل ابزاری سودمند می‌باشد که در روند برنامه‌نویسی بسیار مهم و حیاتی بوده و معمولاً باعث سهولت بسیار برنامه‌نویسی می‌شوند. از جمله مهم‌ترین و پرکاربردترین این ابزار در زیر آورده شده‌اند.

## pyuic4
معادل ابزار uic می‌باشد و بر گرفته از عبارت Python User Interface Compiler v4 می‌باشد. این ابزار فایل‌های رابط گرافیکی ایجاد شده توسط ابزار Qt Designer را به سورس کد پایتون تبدیل می‌کند.

## pyrcc4
این ابزار معادل rcc فریم ورک کیوتی و بر گرفته از عبارت Python Resource Compiler v4 می‌باشد. توسط این ابزار امکان تبدیل فایل‌های منبع (resource) به سورس پایتون فراهم می‌شود. با استفاده از این ابزار می‌توان فایل‌هایی چون عکس، آیکن یا هر فایل دلخواه را به سورس پایتون تبدیل و در برنامه یا فایل اجرایی مستقل (مثلاً exe در ویندوز) درونی سازی نمود.

## pylupdate4
این ابزار نیز معادل lupdate است و برای ایجاد یا بروز رسانی فایل لغات برنامه مورد استفاده قرار می‌گیرد. با استفاده از این ابزار می‌توان فایل ts ایجاد و سپس با استفاده از نرم‌افزاری چون Qt Linguist آن‌ها را ترجمه و در برنامه استفاده کرد. این ابزار روند توسعه برنامه‌های چند زبانه را بسیار آسان می‌کند.

## نصب PyQt
### نصب در ویندوز
نصب PyQt در ویندوز بسیار آسان می‌باشد.
در سیستم عامل ویندوز برخی مواقع نیاز هست مسیر نصب شده به Environment Variables یا متغیرهای محیطی PATH اضافه گردد. برای اینکار مسیر مفسر پایتون و در صورت نیاز کیوتی را به این متغیر اضافه کنید. برای ویرایش متغیر PATH می‌توانید با راست کلیک بر روی My Computer و انتخاب گزینه Properties به تب Advanced و سپس کلیک روی Environment Variables به متغیرهای محیطی دسترسی داشته باشد.

برای نصب فایل باینری نصاب را از سایت رسمی سایت PyQt دانلود و نصب کنید. این فایل باینری با حجم تقریبی ۱۶ مگابایت شامل ابزارهای زیر می‌باشد.
* PyQt
* (Qt (with database support for SQLite3 and ODBC
* Qt Designer
* Qt Linguist
* Qt Assistant
* pyuic4
* pylupdate4
* lrelease
* pyrcc4
* QScintilla
* PyQwt
* Qwt
* eric IDE
روند نصب بسیار آسان بوده و این فایل تمامی ابزارها و فایل‌های مورد نیاز را نصب خواهد کرد.

### نصب در لینوکس
مراحل نصب در لینوکس می‌تواند متفاوت باشد. برخی ترجیح می‌دهند آخرین بسته‌ها را دریافت و کامپایل کنند و برخی برای فرار از مشکلات کامپایل ترجیح می‌دهند از نصاب‌های سیستم عامل استفاده کنند. در حالت کلی بسته‌های زیر (به ترتیب) باید روی سیستم نصب گردند.
* Qt که می‌تواند شامل ابزاری Qt Designer, Qt Assistant و … بوده یا تنها کتابخانه‌های اصلی باشد.
* SIP
* PyQt
ممکن است بسته به سیستم عامل و توزیع‌های مختلف اسامی بسته‌ها متفاوت باشد! برای مثال نام بسته PyQt در مخازن اوبونتو python-qt4 می‌باشد! اگر در مراحل نصب یا کامپایل مشکلی بود در انجمن‌های سایت مطرح کنید.

## روند ساخت یک برنامه با PyQt
ساخت برنامه با استفاده از PyQt ممکن است به روش‌های مختلفی صورت گیرد. در هر روش می‌توان بسته به شرایط و علایق شخصی از ابزارهای مختلفی استفاده کرد.

ولی شاید راحتترین و پرکاربردترین روش استفاده از طراح کیوتی (Qt Designer) می‌باشد. با استفاده از طراح کیوتی می‌توان پیچیده‌ترین پنجره‌ها را به‌سادگی هرچه تمام ایجاد کرد.

این روش شامل مراحل زیر می‌باشد:
# ایجاد یک فایل رابط گرافیکی با استفاده از طراح کیوتی (Qt Designer)
# تخصیص نام و مقدار دهی مشخصه‌های مختلف در ویرایشگر صفات طراح کیوتی
# استفاده از pyuic4 برای ایجاد کلاس پایتون (فایل py) از فایل رابط گرافیکی ایجاد شده
# ایجاد و ساخت تابع اصلی برنامه و فراخوانی کلاس رابط گرافیکی
# گسترش کلاس ایجاد شده موجود با توابع و کدهای پایتون

## تبدیل فایل PyQt به کد پایتون و اجرای آن
تبدیل فایل‌ها با دو روش دستی و نرم‌افزار مبدل امکان‌پذیر می‌باشد

### روش دستی
**مرحله اول: ساخت فرم و ذخیره‌سازی**

در ابتدا شما یک فرم را با استفاده از Designer در PYQT 4 طراحی می‌کنید سپس فرمتان را باید با پسوند.ui سیو (Save) کرده

**مرحله دوم: اجرای PYUIC4**
روی Start در Taskbar کلیک کرده و سپس بر روی Run کلیک کرده در کادر باز شده تایپ کنید CMD و Ok را بزنید.

مسیر pyuic نصب شده را بیابید. به صورت پیش فرض در این مسیر نصب می‌گردد

C:\Python26\Lib\site-packages\PyQt4\uic\pyuic.py

نکته ۱: برای paste کردن در cmd باید کلیک راست رو بزنید و paste رو بزنید و با دکمه ctrl V این کار انجام نخواهد شد.

دستور زیر را در cmd وارد کنید البته برای افراد مختلف این دستور فرق دارد یعنی بعد از دستور CD باید آدرس جایی رو وارد کنید که pyuic در آن قرار دارد

cd C:\Python26\Lib\site-packages\PyQt4\uic

## مرحله سوم:آماده‌سازی نهایی برای تبدیل به کد پایتون
آدرس جایی که (Directory) فایل.ui خودتان را ذخیره شده را کپی کنید به‌طور مثال C:\Python26\Lib\site-packages\PyQt4\1.ui

بعد از این کار یک آدرس برای ذخیره‌سازی فایل انتخاب کنید به‌طور مثال E:\1.py

**مرحله چهارم:تبدیل به کد پایتون**
کد زیر را در CMD وارد کرده و نتیجه را در محلی که فایل.pyw را برای ذخیره‌سازی انتخاب کرده‌اید مشاهده کنید

pyuic.py C:\Python26\Lib\site-packages\PyQt4\1.ui -x> E:\1.py

### نرم‌افزاری مبدل
با استفاده از نرم‌افزار مبدل می‌توانید فایل Ui را به Py تبدیل کنید.

## طراح کیوت
طراح کیوت Qt Designer برنامه ای هست برای طراحی محیط گرافیکی برای دستورهای پایتون

## نمونه برنامه سلام دنیا
کد زیر پنجره سلام دنیا را نشان می‌دهد


```python
#! /usr/bin/env python
# -*- coding: utf-8 -*-
## Here we provide the necessary imports.
# The basic GUI widgets are located in QtGui module.
import sys
from PyQt4.QtGui import *
# Every PyQt4 application must create an application object.
# The application object is located in the QtGui module.
a = QApplication(sys.argv)
# The QWidget widget is the base class of all user interface objects in PyQt4.
# We provide the default constructor for QWidget. The default constructor has no parent.
# A widget with no parent is called a window.
w = QWidget()

w.resize(320, 240) # The resize() method resizes the widget.
w.setWindowTitle("Hello, World!") # Here we set the title for our window.
w.show() # The show() method displays the widget on the screen.

sys.exit(a.exec_()) # Finally, we enter the mainloop of the application.
```

frame|وسط|The result

## برنامه‌های قابل توجه‌ای که از پای‌کیوت استفاده کرده‌اند
* Anki
* Eric Python IDE
* QtiPlot
* qt-recordMyDesktop
* Kodos
* کیوجی‌آی‌اس

## SIP
## جستارهای وابسته
* پایتون (زبان برنامه‌نویسی)
* کیوت Qt
* طراح کیوت Qt Designer
* Eclipse

## منابع
ویکی‌پدیای انگلیسی

https://web.archive.org/web/20110122093338/http://www.riverbankcomputing.co.uk/software/pyqt/intro

رده:ابزارهای ویدجت
رده:کتابخانه‌های پایتون
رده:کتابخانه‌های رایانه‌ای آزاد
رده:کیوت (چارچوب)
رده:مقاله‌های دارای کد نمونه به زبان پایتون
رده:نرم‌افزارهای آزاد چندسکویی
رده:نرم‌افزارهای آزاد نوشته‌شده با پایتون
رده:نرم‌افزارهای آزاد نوشته‌شده با سی++