Labo288

プログラミングのこと、GISのこと、パソコンのこと、趣味のこと

PythonのGUIフレームワークPyQt(PySide)について


はじめに

PythonのGUIフレームワークには以下のとおり、いくつかの選択肢があります。

  • PyQt
  • PySide
  • Tkinter
  • Kivy

TkinterはPython自体に内蔵されていたり、kivyは同一のソースでPCにもAndroidにも対応出来たりとそれぞれに特徴があります。 PyQt5は以上の定番フレームワークのなかでも特に「かんたん」です。それぞれのフレームワークを試した私の実感ですが、とにかく簡単にかけます。PyQtとPySideはいずれも、C++向けGUIフレームワークのQtのPythonラッパーですが、違いは、PyQtがGPLライセンスである一方、PySideはLGPLライセンスという点です。GPLライセンスは、オープンソースにある事に違いはありませんが、GPLライセンスで書かれたソースを参照するコードに関してもすべてGPLライセンスを適用する必要があります。したがって、PyQtを利用するアプリケーションはその全てのソースを公開する必要があります。一方LGPLライセンスは、参照するコードと、LGPLライセンスで書かれたソースがそれぞれ独立していれば、すべてにLGPLライセンスを適用する必要はありません。簡単にいえば、PySideはソースを公開する必要がありません。同じことができるならば、公開しない自由がある方が良いに決まってます、PySideを使いましょう。私はとりあえずPyQtを使用したので、本記事はPyQtについて書きますが、PySideと大きな違いはありません。

PyQtについて

PyQtを使おうとするならば、大本のフレームワークであるQtを知る必要があります。 QtをPythonで書けるのがPyQtであり、クラスや関数の仕様等はすべてQtに準拠しています。

doc.qt.io 各種クラスの仕様等は公式ドキュメントを参照しましょう。

qiita.com 様々なアプリケーションにQtが使われている事がわかります。

PyQtの使い方

本記事では具体的なコードを示したりはしません。概念の説明とします。 PyQtでは、各種ウィジェット(QWidget)を組み合わせてGUIを作成していきます。 各種ウィジェットには、ボタンやプルダウンメニュー、テキストボックスをはじめとしたパーツから、ウィンドウやダイアログを含めたすべてが含まれています。その基底クラスがQWidgetであり、前述の各種パーツについてはこれを継承する形で、QPushButtonや、QLineEditというクラスが用意されています。これらの組み合わせでひとつのGUIアプリケーションを作成するわけです。

実装例

今後実際のアプリケーションと併せて追記します。

終わりに

Pythonが人気なのは、ライブラリの豊富さはもとより、文法の書きやすさが大きな要因だと考えています。だからこそC++で使われるQtをPythonで簡単に書きたい人がいて、PyQtが作られたんだろうなと思います。私自身はアマチュアのプログラマですが、そんな私でも簡単に感じるのがPyQtでした。GUIアプリケーションを作りたいと考える人みんなにおすすめしたいフレームワークです。でも次はPySideを使います。