このサイトは、只今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

【M1 Mac】Python ScrapyがImportErrorで大ハマリ。lxmlなど環境作成し対応した件。

2023.05.24

Django (DRF)で、ユーザーのモデルを作成時にハッシュidを別で保存する。

2020.09.10

macOS pyenv環境でtkinterが動かないので、再度インストール

2020.08.09

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その3

2020.06.14

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その2

2020.06.08

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その1

2020.06.07

Django django-allauthで、サクッとソーシャルログイン機能を実装

2020.04.12

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

2019.07.18

CATEGORY LIST

LATEST NEWS

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US