PySimpleGUI、とても便利ですよね。まだ触りはじめて間もないですが、短いコードでGUIアプリケーションが作れるのでとても重宝しそうです。
やりたいこと
アプリ実行時のタスクバーやタイトルバーのアイコンを、オリジナルのものへ変更したい。
背景
PySimpleGUIで作成したGUIアプリをPyInstallerで実行ファイル(.exe)化するには以下のようなコマンドを打てばよいですよね。
$ pyinstaller --onefile --noconsole --icon=icon32x32.ico hoge.py
このうち、--icon
オプションによって、実行ファイルのファイルアイコンをオリジナルのものへ変更できます。
しかし、タスクバーやタイトルバーのアイコンはおなじみのヘビのマークのままです。これを変更したいなぁという話です。
これを書いたあと改めて調べてみましたが、この件だけをまとめた記事はなさそうなので公開してみることにしました。
ふたつのアプローチ
ググってみると、外部ファイルを読み込む方法(例えばこちらのページで解説)が主流のようですが、他にもソースコードへ埋め込む方法があるようです。
僕の場合、なぜか外部ファイルの読み込がうまくいかなかったので、ソースコードへ埋め込む方法にてアイコンの変更を行いました。
ソースコードへ埋め込む方法
事前準備として、画像ファイルをBase64エンコードする必要があるのですが、それにはまず以下のリポジトリにあるBase64_Image_Encoder.py
をローカルに配置します。
で、PySimpleGUIがあるローカル環境でふつうに実行します。
$ python PySimpleGUI-Base64-Encoder.py
すると、PySimpleGUIで作られた見慣れたウィンドウが表示されるので、Base64エンコードをしたい画像が格納されているフォルダを選択します。
ソースコードを読むかぎり.ico
ファイルにも対応しているようですが、僕の場合はファイルの作り方が悪かったのか本番アプリ起動時に「画像が認識できない」旨の実行時エラーが出ました。.png
だとうまくいきました。
フォルダを選択するとエンコードが行われ、カレントフォルダに新たにoutput.py
というファイルが出来上がっています。このファイルを開くと、エンコード後のバイト文字列が作成されているわけです。
あとは、本番アプリのソースコードにて、ウィンドウの作成時に引数として先ほどのバイト文字列を渡してやれば完了です。
こんな感じで表示されます。