PyQt

**PyQt**は、クロスプラットフォームなGUIツールキットであるQtのPythonバインディングにして、PythonでGUIプログラミングをするときの選択肢の一つである。PyQtの他には、PySide・PyGTK・wxPython・TkinterなどのGUIツールキットが存在する。Qtと同様にPyQtは自由ソフトウェアである。PyQtはPythonのプラグインとして実装されている。

PyQtはイギリスの*Riverbank Computing*社によって開発されており、GPLと商用ライセンスで提供されているが、LGPLの下では提供されていない。PyQtはクロスプラットフォームなツールキットであり、Windows・Linux・macOSなどをサポートしている。

PyQtは440のクラスと6000以上の関数とメソッドを持つ。代表的なものは以下のとおりである。

* 充実したGUIウィジェット
* SQLデータベース (ODBC, MySQL, PostgreSQL, Oracle Database) にアクセスするためのクラス
* QScintillaとScintillaをベースとしたエディタウィジェット
* 自動的にデータベースからデータを取り込みウィジェットに表示
* XMLのパーサ
* SVGのサポート
* Windows上でのActiveXのためのクラス(商用バージョンのみ)

自動的にこれらのバインディングを生成するため、フィル・トンプソンは他のプロジェクトでも使用されるSIPというツールを開発した。

Qtツールキットの所有者であるノキアは、2009年8月にPySideを公開した。PySideはPyQtと同じ機能を持つが、LGPLの下で公開されているという点でPyQtと異なっている。PySideが公開されたのは、*Riverbank Computing*社とのライセンスに関する合意形成に失敗したためである。

## PyQtの構成
PyQt4は次のPythonモジュールを含んでいる。

; QtCore
: イベントループとQtのシグナルとスロット機構を備えた非GUIクラスを含んでいる。このモジュールは、プラットホームに依存しないようにUnicode・スレッド・マップドファイル・共有メモリ・正規表現などを抽象化する。
; QtGui
: 多くのGUIクラスを含んでいる。これらのクラスはModel View Controller設計パターンに基づいた、たくさんのテーブル・ツリー・リストを含んでいる。また、何千ものアイテムを格納できる、洗練された2Dキャンパスウィジェットを提供する。
; QtNetwork
: UDP・TCPクライアントとサーバを作成するためのモジュールである。このモジュールはFTPの実装・HTTPクライアント・DNSルックアップのためのクラスを含んでいる。ネットワークアプリケーションが簡単に開発できるように作成されている。
; QtOpenGL
: OpenGLを扱うためのモジュールである。
; QtSql
: オープンソースでプロプライエタリなSQLデータベースを扱うためのモジュールである。これはGUIクラスで使用できるデータベーステーブル用の編集可能なデータモデルを含んでいる。また、SQLiteの実装も含んでいる。
; QtSvg
: SVGファイルを表示するためのモジュールである。
; QtXml
: QtのXMLパーサにSAXとDOMのインターフェースを実装するモジュールである。
; QtMultimedia
: 低レベルでマルチメディア機能を実装するためのモジュールである。ソフトウェア開発者は普通phononモジュールを使う。
; QtDesigner
: PyQtを用いてQt Designerを拡張するためのモジュールである。
; Qt
: 一つのモジュールに上記すべてのモジュールに含まれるクラスを統合する。このため、Qtモジュールを読み込んでおけば、あるクラスが含まれているかどうかを心配する必要がなくなる。しかし、一つのモジュールに統合することで、アプリケーションのメモリ使用量を増加させる、Qtフレームワーク全体を読み込まなければならないなどの欠点が生じる。この統合されたモジュールを使用するか、個々のモジュールを使用するかは個人の好みになる。
; uic
: Qt Designerで作られた、XMLファイルを扱うためのモジュールである。これは、XMLファイルの読み込み・表示機能や、後に実行するためにXMLファイルからPythonコードを生成するクラスが含まれている。

## Hello World


```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.
```


## PyQtを用いたソフトウェア
* Anki 学習補助ソフトウェア
* Eric Python IDE Pythonの統合開発環境
* Kodos Pythonの正規表現デバッガ
* Orange データマイニングとデータの可視化のためのフレームワーク
* qt-recordMyDesktop recordMyDesktopというソフトウェアのQt版
* QGIS 地理情報システムのためのソフトウェア
* Veusz 科学用途の作図ソフトウェア
* Spyder Pythonの統合開発環境
* Leo プログラミング用のエディタ
* Ninja-IDE Pythonの統合開発環境
* Calibre 電子書籍ソフトウェア
* TortoiseHG Mercurialのグラフィカルなインタフェース

## 関連項目
* PySide
* PyGTK
* wxPython
* Tkinter

## 出典

## 推薦文献
*
*

## 外部リンク
* 
*PyQt5 Tutorial
* PyQt and PyKDE community Wiki
* PyQt Tutorial
* Tutorials
* Tutorial