見出し画像

PythonのためのGUIライブラリ選び

俺はただ、PythonでWindows用デスクトップアプリ、つまりGUIアプリを開発したいだけなんだ!ゲーム用途じゃないので即応性も必要ないしスマホアプリを作る気もない。Webサーバにつないで同行するつもりもない。

シンプルにWindows用デスクトップアプリを自分用に作りたいだけ。

それなのに何でこんなにもわかりにくいのか!という発狂した日記。

(約 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ライブラリが乱立することになったわけだ、一言で言うと。順不同で列記すると、

  1. Tkinter

  2. PySide(Qt for Python)

  3. PyQt

  4. PySimpleGUI

  5. Kivy

  6. WxPython

  7. REMI

  8. 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標準装備であり当然商用利用も可能

他のライブラリについてはざっと調べたがとりあえず商用利用に問題はなさそう。だが私は使うつもりがないので省略。

詳細は説明しないが、無印-GPLと、L-GPLはライセンスの縛りが色々と異なる。各自で調べてみてくれ。

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年間は無料アプデ、以後は永久利用可能なセミサブスクスタイル。

まぁたいていは2年以内に最新版を購入することになるのでほぼ実質的にサブスク導入だろう。

だが個人利用でお試しする分には無料で使える(ただしいずれにしてもユーザー登録必須になったそうで)。売れるアプリが完成するまでは個人利用で試す分には無料でいけるならOKだ。


ソース非公開で商用利用可能

PySimpleGUIは去年くらいまではどうやらLGPL v3だったらしい。だが2024年6月18日現在ではGPLという単語すら存在しない。OSS終了宣言だ。(だが善意でソースコードは公開している、というだけ。)つまりLGPLから独自ライセンスに変更された。そしてEULAの中でソースコードの公開は必須ではないとのこと。

詳細については各自でライセンス条項を目を皿にして確認すべし。私は責任を取りませんw 念のため。

要するにライセンス料が発生する仕組みに変わったものの、払えない金額ではないし商用利用する開発者側にとって問題は何もない。むしろ過去のPySimpleGUIのソースコードや教材をそのまま使える点のほうがメリットがある。なので互換ライブラリに行く必要もないだろう。

個人的には多少の額なら有料であってもツールのメンテを続けてくれて堅牢性を維持してくれたほうが、下手なOSSで迷走されるよりはよっぽどマシだと思っている。


GUI開発ステップを段階的にに分ける

PythonによるGUIアプリ開発を数ステップに分けることにした。

  1. まずはPySimpleGUIで簡単記述かつ軽快にトレーニング。コードの可読性の高さを生かしてPythonでのGUIアプリ開発に早くなじむ作戦

    • 豊富な資料でどんどん実力を付ける。達成感を高める。

    • GUIアプリ開発についてトライアンドエラーでガンガン回す。

    • 開発の勘所を掴みつつ、Pythonの中身のスキルアップもする。

    • 個人的なGUIツールを開発して実際に運用&修正をどんどん試す。

  2. もし将来的に高度な開発が必要になったら改めてPySideで高度な開発に取り組む。PySide学習開始。

  3. PySimpleGUIの完成済みソースをPySide用にリファクタリングする。

    • 何ができて何ができないのか、

    • エラー処理やバグ取りなどでQt流のGUI実装スキルを高める。


ChatGPT先生に聞いてみたらやはり開発の難易度が両者でかなり異なるようだ。PySimpleGUIでは2~4週間、PySideでは2~数ヶ月と、かなり違う。なのでこりゃ初心者はPySimpleGUIだなと。

そしてそもそも本当にPySideが必要かすら怪しいが😅


まずはPySimpleGUIで遊ぶ

なのでPythonのGUI開発はTkinterではなくてPySimpleGUIに決めました!


すんげ~時間かかった、この決定に至るまでの情報収集と判断の多さ・複雑さよ。道筋が1本じゃないことの弊害、OSSのアルアルだ……。


今回の創作活動は約2時間(累積 約3,845時間)
(1,098回目のnote更新)

筆者はAmazonアソシエイト・プログラムに参加しています。(AmazonアソシエイトとはAmazon.co.jpの商品を宣伝し所定の条件を満たすことで紹介料をAmazon様から頂けるという大変ありがたい仕組みのこと。)
以下のリンクを経由してAmazonでお買物をするとその購入額の1~3%ほどのお小遣いが私に寄付されます。誰が何を買ったという情報は私には通知されませんのでご安心下さい😊 以下のリンクを経由して頂ければ紹介商品以外のご購入でもOKですよ~。


読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊