PythonでGUIアプリ開発「PyQt」を使った感想
2019.07.18
この記事は最終更新日から1年以上が経過しています。
どもです。
話は結構前になるのですが、書かないと忘れそうなので備忘録程度に。
今回は、PythonでGUIアプリ開発「PyQt」を使った感想。
ということで、「PyQt」について書こうかなと思ったのですが、そもそも「PyQt」って何よ??
って方もいるかも知れませんので、軽く説明を。
「PyQt」は、「Qt」という、WindowsやLinux、MacなどクロスプラットフォームGUIツールキットをPythonバインディングされたものです。
PyQtは440のクラスと6000以上の関数とメソッドを持つみたいです。
クロスプラットフォーム開発
という訳で、要は「クロスプラットフォームGUIアプリ(デスクトップ)」を作りたかったわけです。
(Windows → exeファイル にコンパイル。)
それ以前に、
Mono, WinFormsの検討もしたところ、Monoでの開発が良さそうだったので、Monoで作成進めました。
MonoDevelop
が、辛いことに日本語がMac で文字化けする。。
うーん。直すの大変そう。
更にもっと楽にGUI実装したいなぁ。と思ったところGtkのIDEが、デザイナと言われる機能があり、あまりプログラム記述せず楽にGUIを作成できそうでしたので選んでみました。
GTK2で作成されたソフトには有名なところで「GIMP」「Inkscape」「Mozilla Firefox」「Moziila Thunderbird」などがあります。
当方は、Mono同様、C#の方が書きやすいのでGtkのC#版Gtk#を利用しました。
ですが、GtkのGUIアプリのデザインがなにやらLinuxのデザイン寄りなんですよね。。
その他に、「windowsで実行する際に、GTK# の実行環境が必要とされる」ということは、「ダブルクリックで実行できない(Monoコマンドで実行)」などいった感じなのです
そこで、Windows Presentation Framework (WPF)での開発も検討したのですが、会社のメインマシンはMacでして、Macでは開発できなかったりと。。
Electronも検討しましたが、うーん。。。
ということで、色々と実績もあるQtを選択
Qt
Qtも、Monoなどと同様で、クロスプラットフォームアプリケーションフレームワークの一つで、様々なアプリで採用されています。
有名なところでは、「Skype」「Adobe Photoshop Elements」「Google Earth」「CMake」「Bitcoin Core」「Kindle」「Maya」などなど。
と言ったところで、使っていたあのアプリも!実はQtで作られているって感じですね。
QtはC++で開発されていて、アプリ開発もC++もなるのですが、できればLL言語で開発したいなと思い、選択したのがPythonでした。
と言った流れで、PythonバインディングされたPyQtで実装したのですが、正直開発が「クッソ楽」でした。
PyQt
github
window立ち上げるのも以下ぐらいのソースでできちゃいます。
import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * import sip class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setGeometry(400, 100, 400, 100) self.setWindowTitle('PyQt') if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_())
サムネイルをドラッグ・アンド・ドロップで放り投げて検証するアプリを作成したのですが、PILを利用すればラクラク。
from PIL import Image
と、意気揚々とサクッと作成したまでは良かったのですが、何より大変だったのは、コンパイルでした。。
最初は、「py2exe」を用いてコンパイルを行っていたのですが、
py2exe
https://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/
以下の様な依存に悩まされました。。
Python バージョン依存表
Python 3.4 | Python 3.5 | Python 3.6 | Runs* | Works** | |
---|---|---|---|---|---|
PyQt4 | Yes | Yes | Yes | ? | ? |
PyQt5 | No | Yes | Yes | Yes | Yes |
pyexe(0.9.2.2) | Yes | No | No | Yes | No |
pyinstaller*** | Yes | Yes | No | Yes | No |
Python 3.4じゃないと、py2exe が対応していないのですが、PyQt4は cp35(Python 3.5)までしかアーカイブファイルが存在しない様子。。。
ファイル
PyQt4‑4.11.4‑cp35‑cp35m‑win32.whl
whl をpip installするためには、wheelが必要かつ、リネームが必要となってきます。
PyQt4‑4.11.4‑cp35‑none‑win32.whl
にリネームが必要。
なんだかんだで、結局、
- Python バージョン 3.5
- フレームワーク PyQt5
- コンパイラ pyinstaller
といった構成にしました。
pyinstaller
インストール
$ pip install pyinstaller
コンパイルコマンド
$ pyinstaller main.py --onefile --noconsole
なんとか、こちらでWindows様にもコンパイルできたのですが、結果、作成時間よりコンパイルに時間が取られてしまいました。。
Qt自体もよく、PyQtも良いのですが、Pythonライブラリなど利用する際などは気をつけたほうが良いかもしれませんね。
という色々ぶつかったので、Qt(C++)で作成している今日このごろでした。
ではではぁ。