1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PySimpleGUI】タスクバーやタイトルバーのアイコンを、ソースコードへ埋め込んで設定する方法

Last updated at Posted at 2023-12-07

PySimpleGUI、とても便利ですよね。まだ触りはじめて間もないですが、短いコードでGUIアプリケーションが作れるのでとても重宝しそうです。

やりたいこと

アプリ実行時のタスクバーやタイトルバーのアイコンを、オリジナルのものへ変更したい。

背景

PySimpleGUIで作成したGUIアプリをPyInstallerで実行ファイル(.exe)化するには以下のようなコマンドを打てばよいですよね。

$ pyinstaller --onefile --noconsole --icon=icon32x32.ico hoge.py

このうち、--iconオプションによって、実行ファイルのファイルアイコンをオリジナルのものへ変更できます。

しかし、タスクバーやタイトルバーのアイコンはおなじみのヘビのマークのままです。これを変更したいなぁという話です。

image.png

image.png

これを書いたあと改めて調べてみましたが、この件だけをまとめた記事はなさそうなので公開してみることにしました。

ふたつのアプローチ

ググってみると、外部ファイルを読み込む方法(例えばこちらのページで解説)が主流のようですが、他にもソースコードへ埋め込む方法があるようです。

僕の場合、なぜか外部ファイルの読み込がうまくいかなかったので、ソースコードへ埋め込む方法にてアイコンの変更を行いました。

ソースコードへ埋め込む方法

事前準備として、画像ファイルをBase64エンコードする必要があるのですが、それにはまず以下のリポジトリにあるBase64_Image_Encoder.pyをローカルに配置します。

で、PySimpleGUIがあるローカル環境でふつうに実行します。

$ python PySimpleGUI-Base64-Encoder.py

すると、PySimpleGUIで作られた見慣れたウィンドウが表示されるので、Base64エンコードをしたい画像が格納されているフォルダを選択します。

ソースコードを読むかぎり.icoファイルにも対応しているようですが、僕の場合はファイルの作り方が悪かったのか本番アプリ起動時に「画像が認識できない」旨の実行時エラーが出ました。.pngだとうまくいきました。

image.png

フォルダを選択するとエンコードが行われ、カレントフォルダに新たにoutput.pyというファイルが出来上がっています。このファイルを開くと、エンコード後のバイト文字列が作成されているわけです。

image.png

あとは、本番アプリのソースコードにて、ウィンドウの作成時に引数として先ほどのバイト文字列を渡してやれば完了です。

image.png

こんな感じで表示されます。

image.png

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?