PythonのためのGUIライブラリ選び
俺はただ、PythonでWindows用デスクトップアプリ、つまりGUIアプリを開発したいだけなんだ!ゲーム用途じゃないので即応性も必要ないしスマホアプリを作る気もない。Webサーバにつないで同行するつもりもない。
それなのに何でこんなにもわかりにくいのか!という発狂した日記。
(約 3,800文字の記事です。)
Pythonの紹介ネタ、偏ってなくね?
なぜかPythonを調べると以下のネタが散見される。しかも異様に偏っている。
AI開発
Webスクレイピング
なぜかエクセルとPDFの自動化w
サーバとAPIとDB接続で色々アレコレ処理して云々かんぬん
素人目にしてみれば、「で、結局Pythonで何ができるの?」なのだ。ちなみに、
AI開発は大学に入り直すレベルで数学の知識や人工知能に関する情報工学の修得が必須
Web系はWeb用のたくさんのプログラミング言語の習得が前提
Web系はセキュリティの知識がないと実装する上ではザルだらけで危険
そもそもWeb系は現役のエンジニアがライバルなので素人はお呼びでない(教材はすべてプロエンジニア養成講座の入り口に過ぎない)
初心者向け講座は延々とprint()でコンソールと対話。次にAPIの読み書きでWebサーバと対話&DBへのデータの読み書きをシコシコと。
結局、素人がPythonでどうやって遊べ?と。
なのでPythonが騒がれる割に、Pythonすげぇぇぇっ!っとなる事例があまり見当たらない。ナンダソレ?なのである。
PythonのためのGUIライブラリ選び
どうやらライブラリを入れればPythonでもGUIアプリ開発ができるそうだ。やはりウィンドウがあって、文字入力やリストからの選択があってOKや実行ボタンがあってこそのプログラミングだと思う。人が触れるGUIがないと、イマイチ「何ができるの?何が美味しいの?」という気がしてならない。
さて、ここからが長い。そもそもPythonにGUIを期待している人が少ないのかなぜか知らないが、とにかく情報が出てこない。そしてでてきても点でバラバラ。The 王道という物が見つからない。なのでまたまた、またしても、またして~もPythonに関して長い情報収集の旅に出る羽目に😭結局2日ほど潰した気がする。紆余曲折あって、二転三転して、ようやく結論が出たのでまとめ日記を書いている。(昨晩もダラダラ書いたがとりとめなくなり、しっちゃかめっちゃかになったのでお蔵入り。今書き直し中。今ココ)
何でこんなにばらけているライブラリ
結局、開発者の思惑の綱引きによって有象無象のGUIライブラリが乱立することになったわけだ、一言で言うと。順不同で列記すると、
Tkinter
PySide(Qt for Python)
PyQt
PySimpleGUI
Kivy
WxPython
REMI
Dear PyGui
ざっと挙げても8つもある。これ以上は割愛。そして全部について特徴を調べて精査した。それらをダラダラ書いてもしょうがないが、一応これらはすべて商用利用可能なのだが、色々と罠がある。タダとは言っていない部分もある。例えば、
PyQtはGPL v3なので商用利用無料だがソースコードを全部開示せよ。それが嫌なら商用ライセンスを買ってね
PySideはLGPL v3に従う限り商用利用も無料でソースコード非開示でもOKだが、LGPLに従ってね。それが嫌なら商用ライセンスを買えばLGPLを無視できるよ
PySimpleGUIは去年くらいまではLGPL v3だったらしい
だが2024年6月18日現在ではPySimpleGUIはLGPL v3ではないため、ソースコード非開示で商用利用OKだよ。
商用利用の場合には99ドルで現行版を買いきってね。
TkinterはPython標準装備であり当然商用利用も可能
他のライブラリについてはざっと調べたがとりあえず商用利用に問題はなさそう。だが私は使うつもりがないので省略。
PySimpleGUIに決定!
まずは結論から。多くの人は標準ライブラリのTkinterからスタートすると思うが、色々調べたところ、TkinterよりもPySimpleGUIのほうが「Pythonらしく、かつ可読性に優れ、レイアウトをイメージしやすい」ということらしい。
Tkinterの弱点
というのも、
TkinterはもともとはPythonではない言語をPythonで使えるようにしたものなので、コーディングスタイルが「Pythonらしくない」とのこと
なのでコードの可読性も悪く、複雑なUI構成にすると「わけがわからん」ことになるらしい
古めかしいUIは見た目だけを変更できるパッケージ?ライブラリ?を導入すれば何とかなることは分かった
個人的にはTkinterが「Pythonらしくない」ところがとてもひっかかった。パイソニストは美学を重んじるのだ😍
PySimpleGUIの強み
それに対してPySimpleGUIはTkinterのPythonらしくない部分に不満を抱いたPythonエンジニアが開発したライブラリ。なのでPythonチックらしい。副次的な効果でソースコードも少なくてスッキリする。いいこと尽くめだ。
レイアウトがPythonのリストの配置に従う(なのでイメージしやすい)
可読性重視の結果、無駄なソースコードが減ってスッキリ読みやすい
英語の詳細なドキュメントが山ほどある
実はTkinterよりも初心者向けで、実装がとにかく早くできる
サッと作ってパッと試してスッと実運用したい人にピッタリ(私)
コードのリストの並び順がそのままGUIレイアウトになるので分かりやすいそうだ。またTkinterでできないことも多少はできるようになるらしい。そしてラッパーとしてQtシリーズなども使えるそうな。(ただしラッピングするので動作は遅くなるとか。まぁ即応性重視のアプリを作るつもりはないので問題ない。)
ただしPySimpleGUIは今年の春に無料から有料化し、商用利用する場合には現行版を99ドルで買い切りスタイルになった。買い切りから1年間は無料アプデ、以後は永久利用可能なセミサブスクスタイル。
だが個人利用でお試しする分には無料で使える(ただしいずれにしてもユーザー登録必須になったそうで)。売れるアプリが完成するまでは個人利用で試す分には無料でいけるならOKだ。
ソース非公開で商用利用可能
PySimpleGUIは去年くらいまではどうやらLGPL v3だったらしい。だが2024年6月18日現在ではGPLという単語すら存在しない。OSS終了宣言だ。(だが善意でソースコードは公開している、というだけ。)つまりLGPLから独自ライセンスに変更された。そしてEULAの中でソースコードの公開は必須ではないとのこと。
要するにライセンス料が発生する仕組みに変わったものの、払えない金額ではないし商用利用する開発者側にとって問題は何もない。むしろ過去のPySimpleGUIのソースコードや教材をそのまま使える点のほうがメリットがある。なので互換ライブラリに行く必要もないだろう。
GUI開発ステップを段階的にに分ける
PythonによるGUIアプリ開発を数ステップに分けることにした。
まずはPySimpleGUIで簡単記述かつ軽快にトレーニング。コードの可読性の高さを生かしてPythonでのGUIアプリ開発に早くなじむ作戦。
豊富な資料でどんどん実力を付ける。達成感を高める。
GUIアプリ開発についてトライアンドエラーでガンガン回す。
開発の勘所を掴みつつ、Pythonの中身のスキルアップもする。
個人的なGUIツールを開発して実際に運用&修正をどんどん試す。
もし将来的に高度な開発が必要になったら改めてPySideで高度な開発に取り組む。PySide学習開始。
PySimpleGUIの完成済みソースをPySide用にリファクタリングする。
何ができて何ができないのか、
エラー処理やバグ取りなどでQt流のGUI実装スキルを高める。
そしてそもそも本当にPySideが必要かすら怪しいが😅
まずはPySimpleGUIで遊ぶ
なのでPythonのGUI開発はTkinterではなくてPySimpleGUIに決めました!
すんげ~時間かかった、この決定に至るまでの情報収集と判断の多さ・複雑さよ。道筋が1本じゃないことの弊害、OSSのアルアルだ……。
今回の創作活動は約2時間(累積 約3,845時間)
(1,098回目のnote更新)