このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

PythonでGUIアプリ開発「PyQt」を使った感想

Python

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

https://www.monodevelop.com/

 

が、辛いことに日本語がMac で文字化けする。。

うーん。直すの大変そう。

更にもっと楽にGUI実装したいなぁ。と思ったところGtkのIDEが、デザイナと言われる機能があり、あまりプログラム記述せず楽にGUIを作成できそうでしたので選んでみました。

https://www.gtk.org/

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

https://github.com/pyqt

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++)で作成している今日このごろでした。

ではではぁ。

Comment

Related Article

PythonでGUIアプリ開発「PyQt」を使った感想

2019.07.18

CATEGORY LIST

LATEST NEWS

部下を育てる技術

イベント

2020.04.08

令和の時代に、JavaScriptで Shift-JISファイル作成 全銀データフォーマットに対応する。

JavaScript

2020.03.03

インターネットにて世論調査を行う「世論Web」サービスを始めてみました。

JavaScript

2020.01.31

まだ間に合う!!ラズベリーパイ購入なら「RSコンポーネンツ」で!最大40%オフの年に1度の大特価期末セール中!

RaspberryPi

2020.01.25

年末のレトロゲーム熱の際、ファミコンソフト一覧パッケージ作ってました。

JavaScript

2020.01.24

TSUKUMO の初売りでNAS (Synology DiskStation DS218j)購入!!

イベント

2020.01.04

Mac用 エミュレーター 「OpenEmu」が、V2.2リリース!GameCube対応して更に神アプリ進化!

Game

2020.01.01

この時期になると、やたらレトロゲームをやりたくなるのはなんですかね?ハードオフに向かうの巻その2

Game

2019.12.31

この時期になると、やたらレトロゲームをやりたくなるのはなんですかね?ハードオフに向かうの巻

Game

2019.12.14

MacでWindowsアプリ(TeraPad)を動かす(Wine 4.0.3)

mac

2019.12.08

kindleストア7周年記念セール中!技術書なども40%OFF以上でお買い得!(11/7まで)

イベント

2019.10.28

あと10日で「jsdo.it」のサービスが終わってしまう!! ソースダウンロードまだの方は急げぇ〜!

JavaScript

2019.10.21

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US