PythonでGUI wxPyhonを極める

2021-04-19




プログラミング言語「Python(パイソン)」の話です。

Python

ここを見てくださっている方は、「Python」で「WindowsやMac用」のGUIソフトを作成したいと思っている方かと思います。

そのような目的の方のために、Python用のGUIライブラリであるwxPythonについて記載していきます。

Python 2ではなくPython 3(Python Ver.3以上)の話です。

多くの場合、何か具体的に知りたいことがあってこちらを読んでくださっているかと思いますが、こちらについては「関係ない」と思われることも一度さらっと読むことをお勧めします。

何かあったときに、ここに書いてあることが頭の片隅にあるかどうかで、問題解決までの時間が大きく変わるかと思います。

インストール方法とかは簡単ですし、いろんなサイトに書いてありますし、すぐに見つかると思いますのでここでは書きません。

このページではwxPythonのクラスやメソッドの使い方、仕様などは記載しませんが、今後wxPythonを使っていく方にとって有用になるであろう情報を記載しています。

実際の書き方については、別ページを設けます。

サンプルプログラムへのリンクは下の方に貼っておきます。

↓参考までに遊びで作成した、wxPythonで作成した鬼滅の刃 紅蓮華 歌詞表示アプリです。動きが動画(YouTube)になっています。

wxPythonとは

wxpython

wxPythonは、PythonでGUIを実現するための有用なライブラリになります。

PythonでGUIを実現するにはwxPython以外にも「Tkinter」「Kivy」「PyQt」など、様々な選択肢があります。

「Python GUI おすすめ」などで検索すれば、比較してくれているサイトも見つかりますので、自分に合ったライブラリを選択するのが良いかと思います。

理想的には、いろんなライブラリを使ってみてから自分に合うものを選ぶのが良いかと思います。(が、実際は面倒ですよね…)

wxPythonは、もともとC++用に作られたクロスプラットフォームGUIツールキット「wxWidgets」というライブラリのPython版ということになります。

クロスプラットフォームというのは、基本的に「WindowsだのMacだのOS(プラットフォーム)を気にせず書ける≒WindowsでもMacでも同じソースで大体同じように動作する」ということです。

私がwxPythonを選んだ理由

ネットを調べて見つかるwxPythonの特徴としては
・洗練されたAPI
・豊富なライブラリ
・動作が安定
・複雑なものにも対応可能
・OSと調和したGUI(WindowsはWindowsらしく、MacはMacらしく)
・高速
というような情報が出てきます。

デメリットは、特に見つかりません。

個人的なポイントとしては
・(個人的に)ソースの書き方がしっくりくる(違和感を感じず、書きやすい)
・ネットに情報が多い
・PyInstallerとの相性が(比較的)いい(気がする)
と感じています。

GUIのプログラムを作りたい、ということは作ったプログラムをexe化したい人も多いことでしょう。

GUIもexe化も様々な方法があり正解は分かりませんが、私はwxPython + PyInstallerでexe化しています。

Tkinterはどう?

Tkinterというのは、Python標準のGUIイブラリとなります。

標準ということを考えると、Pythonのバージョンアップに必ず追従しているはずですし、情報量も多く使い勝手もよさそうなイメージなのですが、私はダメでした。

ソースの書き方が分かりづらいのと、PyInstallerとの相性が悪いと感じています。

個人的には、です。

GUIデザイナー

wxPythonには、GUIデザイナーといって、GUI部分のデザインをGUIでできるようなツールがあります。

要するに、コードを書かずにウィンドウや入力フォームのデザインができるということです。

個人的には、自分でやりたい派(コーデイングしたい派)なので使いません。

などが参考になるかもしれません。

気になる方は調べてみてください。

情報収集で気をつけてほしいこと

当たり前ですが、ネット上にはwxPython以外にもC++用のwxWidgetsの情報もたくさんあります。

それは問題ないのですが、例えばwxPythonで「wx.MessageBox()」という関数を使おうとして、その仕様を調べると「wxPython」用に記載されているものと「wxWidgets」用に記載されているものの両方がヒットしたりします。

そのページに「wxPyhon用だよ」とか「wxWidgets用だよ」とか書いてあればまだいいのですが、wxWidgetsのWebページを書いている人はwxPythonのことなどまったく気にしていないことがほとんどなのでわざわざ「wxWigetsだよ」などとは書いていません。

そしてwxPythonよりもwxWidgets用の方が古くからあるため情報量も多く、wxPythonについて知りたい人にとっては少し面倒くさい状況になっています。

さらにさらに、wxPythonとwxWidgetsで同じ関数の名前なのに、仕様(引数や戻り値、動作)が微妙に違ったりするのです。

なので、wxPythonの情報について調べるとき、wxWidegetsの情報を調べたとしてもwxPythonでも同じように動作する場合がほとんどなのですが、どうしても「おかしいな」と思った場合には「wxPython」なのか「wxWidgets」なのかしっかり確認することをお勧めします。

というよりは最初からしっかり「wxPython」用の情報であることを確認してから適用する方が、無駄なトラブルにならずに済むと思います。

Phoenix?

PythonでおすすめのGUIライブラリ4選

によると

wxPythonは長らくPython 2専用でしたが、最近ではPython 3で使える「Phoenix」と呼ばれるバージョンが登場しています。通常のwxPythonとインストール方法などが異なるので気を付けましょう

PythonでおすすめのGUIライブラリ4選

これ、何なんでしょうね。

最近になってPythonを始めたので、Python 2系とか古いことは分かりません。

おそらくですが、Python 2からPython 3への移行(VersionUp)に伴い、wxPythonもPhoenixという名称変更を行おうとしたのかもしれません。コードネーム?

wxPythonの公式サイト一部にはたしかに「Phoenix」の記載があります。

が、定着しなかったのかなんだか中途半端な気がします。

「Phoenix」は気にせず、「wxPython」でいいと思います。

調べるときにも「Phoenix」は不要ですし、「Phoenix」という単語が出てきたときには、「Python 3用のwxPythonのことね」と思えばいいです。

まぎらわしい。ややこしい。無駄。

一応、(Pythonのバージョンではなく)wxPython Ver.4.0以降がPhoenixで、それ以前がクラシックwxPythonになるようですが、そのような言い方をしているのはほとんど公式サイトのみだと思います。

基本は公式サイト

当たり前ですが、基本的には公式サイトの情報が一番信頼性が高いです。

当サイトも含め、他のサイトの情報は「わかりやすいかもしれないけど、間違っているかもしれない」というスタンスで付き合うのがよいかと思います。

ただし、トラブル関係やサンプルコードでは役に立つものもたくさんあります。

バージョン対応表

PythonとwxPythonのバージョンの対応関係、分かりません。

調査中です。pipでインストールするし、大事じゃないのでしょうか。

私が出会ったトラブル

私はwxPythonを使っていて、以下のようなことでハマりました。
wxPython + PyInstaller + subprocessが動かない
wxPython でsleep()すると応答なし
MessageBox()の戻り値

今後も何かあれば追記します。

↑これも参考になるかもしれません。個人的にはめちゃくちゃ参考になりました。

wxPythonサンプルプログラム

wxPythonリファレンス

リファレンスのページ作成し、そこに追記していきます。

とりあえず、以上。

記事はここまでです。