Python でアプリを作成した時に独自アイコンを表示させる方法を紹介します。
Tkinter のウィンドウのタイトルバーに独自アイコンを表示させる方法と
Pyinstaller で EXE にしたファイルに独自アイコンを表示させる方法です。
あわせて、GIMP を使ったアイコン画像の作り方を紹介します。
目次
◆アイコンは2種類
これらは別々に設定する必要があります。それぞれの設定方法を説明します。
更にアイコンファイルの作成方法(説明⤵)も説明します。
▽タイトルバーアイコン
▽EXEアイコン
◆タイトルバーアイコンの設定方法
Tkinter を使ったアプリでは、そのウィンドウに独自のアイコンを設定することができます。
タイトルバーアイコンと呼んでいます。
設定には、iconphoto()
メソッドを使用します。
- 【構文】
iconphoto(default=False, image1, image2 ...)
- よく使う使い方(サンプル)
【構文】iconphoto(False, tk.PhotoImage(file="icon.png"))
引数
例:
import tkinter as tk root = tk.Tk() photo = tk.PhotoImage(file = "Any image file path") root.iconphoto(False, photo)
※Tkinter には、iconbitmap() メソッドも用意されています。こちらは ICO ファイルしか扱えないので今回は使用しませんでした。
◆アイコンをコードに埋め込む
前節の説明でタイトルバーアイコンは表示できます。
このままでもよいのですが、このままだとアイコンファイルを提供しなければなりません。
提供しなくてすむ方法を捜しました。
アイコンファイルは、base64でエンコードすればコード内に埋め込めます。
アイコンファイルをエンコードするには、PowerShell を使うのが便利です。
【手順】
- GIF ファイルを用意
- PowerShell で GIF ファイルをエンコードしてテキストファイルに出力 1
certutil -encode icon.gif icon.txt
- 出力されたテキストファイルからエンコードデータを取得
- コードに貼り付け
◇PowerShellでエンコード
Windows PowerShell で次のコマンドを実行します。
powershell
certutil -encode icon.gif icon.txt
certutil
コマンドに -encode
パラメータを指定するとファイルを Base64 にエンコードします。
▽出力結果(icon.txtの中身)
-----BEGIN CERTIFICATE----- R0lGODlhAAIAAuf/AAABAAcAAAwGBBAHABYGAAkMCBcJAgwOChMODBsOACAOAiIP ABgTDCMRABYXFBwXESgWACAbFjAYACwaAB0eHDMaACMeGTYdACciHSIkITshACgk ...中略... IAYzqMENcrCDHvwgCEMowhGSsIQmPCEKU6jCFbKwhS58IQxjKMMZ0rCGNrwhDnOo wx3ysIc+/CEQgyjEIRLxZQEBADs= -----END CERTIFICATE-----
「-----BEGIN CERTIFICATE-----」と「-----END CERTIFICATE-----」の間をコピーします。
py ファイルに data = """文字列"""
としてペーストして埋め込みます。(改行されたまま扱えるように)
◇Pythonコード
エンコードしたデータを使って PhotoImage オブジェクトを作成します。
プログラムの主要コードとアイコンのコードは分けたかったので、ファイルを別にしました。
やっていることは、アイコン画像をbase64でエンコードしたデータを PhotoImage() コンストラクタで読み込んでPhotoImage オブジェクトを作成します。
以後に、iconphto() メソッドでタイトルバーアイコンに設定します。
import my_icon # アイコン root = Tkinter.Tk() # トップレベルウィンドウの作成 photo = my_icon.get_photo_image4icon() # PhotoImageオブジェクトの作成 root.iconphoto(False, photo) # アイコンの設定
▽my_icon.py
""" ICON """ import tkinter as tk icon_data = """R0lGODlhAAIAAuf/AAABAAcAAAwGBBAHABYGAAkMCBcJAgwOChMODBsOACAOAiIP ABgTDCMRABYXFBwXESgWACAbFjAYACwaAB0eHDMaACMeGTYdACciHSIkITshACgk ...中略... IAYzqMENcrCDHvwgCEMowhGSsIQmPCEKU6jCFbKwhS58IQxjKMMZ0rCGNrwhDnOo wx3ysIc+/CEQgyjEIRLxZQEBADs= """ def get_photo_image4icon(): return tk.PhotoImage(data=icon_data) # PhotoImageオブジェクトの作成
◆EXEアイコンの設定方法
アプリを Pyinstaller で EXE ファイルにする場合、ファイルのアイコンを指定することができます。
pyinstallerで EXE を作成する時に --icon
オプションを付加します。
- オプション:
-i
または--icon
- 値:
file.ico
またはfile.exe,ID
またはfile.icons
またはImage
またはNone
- 例:
pyinstaller -F -w --icon icon.ico ソースファイル名
◆アイコン用画像の作り方
まず、アイコンのサイズですが、いろいろ調べたのですがよく分かりませんでした。
一応、512×512ピクセルにしました。
GIMP を使ったアイコン作成を紹介します。
GIMP の場合、同じ画像から ICO ファイルと GIF ファイルが作れます。
【GIMP による画像作成の手順】
- GIMP 起動
- 新しい画像を作成(ファイル⇒新しい画像)
キャンパスサイズを幅512、高さ512にして作成
背景のレイヤーができる - 新しいレイヤーグループを作成(レイヤー⇒新しいレイヤーグループ)
- レイヤーグループに背景のレイヤーを含める
背景のレイヤーをレイヤーグループのレイヤーにドラッグ
レイヤーグループが選択された状態でドロップ - 画像の作成
レイヤーグループの中にレイヤーを作って画像を作成します
意図しない場所にレイヤーができてもドラッグして移動できます - GIF のエクスポート(ファイル⇒名前を付けてエクスポート)
名前を付けてエクスポートで拡張子を「gif」にします - ICO のエクスポート(ファイル⇒名前を付けてエクスポート)
名前を付けてエクスポートで拡張子を「ico」にします
※既に画像ファイルがある場合は、GIF のエクスポートと ICO のエクスポートを実行するだけです。
そうしないとそれぞれのレイヤーを別々の画像にしたマルチな ICO としてエクスポートされます。
▽私が作成したアイコンです。すべて文字だけで作りました。
文字の回転や、レイヤーグループの状況が見て取れます。
◆さいごに
Python の勉強を始めて、諸先輩のサイトを参考にいろいろコードを試してみます。
それだけだと、「あっ、こうなるんだ」というだけで終わってしまい、記憶に残らないこともあります。
それなので、自分としてはきちんと動くものにして勉強してきたつもりです。
その結果を公開もしました。
せっかく作ったアプリなので少し自分を主張してみようかなと独自アイコンの設定方法を勉強したので紹介しました。
アイコンの設定方法が分かっても、アイコン自体にセンスがないので、そこをなんとかしないと・・・
◇ご注意
本記事は次のバージョンの下で動作した内容を基に記述しています。
- Python 3.8.5
◇免責事項
ご利用に際しては、『免責事項』をご確認ください。
お気づきの点がございましたら『お問い合わせ』からお問い合わせください。
◆参考
-
サイト『tkinterのタイトル横のアイコンをコードに埋め込む方法 - Qiita』で「gifファイルがいいらしい」と言及されています。↩