Flet、PyinstallerでWindowsアプリを作成する時、EXEのアイコンはPyinstallerで設定できるが、タスクバーのアイコンがFletの魚みたいなアイコンなのが、ちょっと嫌でした。
検索してみても、ぴったりな記述が見つからなかった・・・のは、もしかすると当たり前すぎて書かれていないだけなのかもしれませんが、私は少し困っていたので記しておきます。
結論
アイコンファイルがルートにあるとして、次のように書くとタスクバーのアイコンがEXE化後も設定されます。
specは、one fileにしないパターンです。
def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
page.window.icon=resource_path("icon.ico")
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['flet.py'],
pathex=[],
binaries=[],
datas=[('icon.ico','.'),], # <-- icon
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
splash = Splash('splash.png',binaries=a.binaries,datas=a.datas,)
exe = EXE(
pyz,
splash, # <-- splash target
a.scripts,
[],
exclude_binaries=True,
name='Fletexe',
debug=False, #
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False, #
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='.\icon.ico', # <-- exe icon
)
coll = COLLECT(
exe,
splash.binaries, # <-- splash binaries
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='Fletexe',
)
resource_path については、下記の記事を参考にしています。
挙動的には、EXE起動後、最初はFletの魚のようなアイコンでタスクバーに表示されますが、その後アイコンファイルに書き換わる、というような感じになります。
少し思っていたのとは違いますが、許容できるレベルかなと思っています。
確認したversion
flet 0.24.1
pyinstaller 6.10.0
その他の方法
Flet Pack
コマンドでのFletのexe化ツールで、Flet pack
と始めることで、exe化できるということです。この時アイコンも設定できるようです。
ただ、Flet pack は、pyinstallerのラッパーのようなので、恐らくやっていることはpyinstallerと同じだと予想して試してません。
Flet build
Flet build
とすることで、アプリ化できるようです。Flutter SDKまでセットアップはしましたが、スムーズにいかなかったので、そこで諦めて最後まで試してません。