PyInstaller打包的Tkinter应用在Windows 11任务栏不显示图标问题求助
PyInstaller打包的Tkinter应用在Windows 11任务栏不显示图标问题求助
我最近在折腾用PyInstaller打包Tkinter应用时,遇到了个超级头疼的问题——图标没法同时在窗口标题栏和Windows 11任务栏正常显示。我已经试了好几种方法,但还是时好时坏:有时候UI左上角的标题栏能显示图标,但打包成exe后任务栏就是不出来。我用的是Python 3.12,真的快被这个问题搞崩溃了,有没有大佬解决过这个问题?或者还有什么其他方法可以试试吗?
下面是我已经试过的所有方法:
- 标准Tkinter方法:使用
root.iconbitmap()
root = tk.Tk() root.iconbitmap('flarepie_logo.ico')
- 设置
AppUserModelID
import ctypes app_id = 'com.mycompany.myapp.5.5' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(app_id)
- PyInstaller打包参数配置
pyinstaller --onefile --windowed --icon=logo.ico myapp.py
- 同时使用
iconbitmap和iconphoto
root.iconbitmap('logo.ico') logo_img = tk.PhotoImage(file='logo.png') root.iconphoto(True, logo_img)
- 使用绝对路径指定图标文件
ico_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logo.ico') root.iconbitmap(ico_path)
- 借助PyWin32库设置图标
import win32gui import win32con import win32api def set_taskbar_icon(self): hwnd = win32gui.GetParent(self.root.winfo_id()) icon_path = os.path.abspath("logo.ico") big_icon = win32gui.LoadImage( 0, icon_path, win32con.IMAGE_ICON, 32, 32, win32con.LR_LOADFROMFILE ) small_icon = win32gui.LoadImage( 0, icon_path, win32con.IMAGE_ICON, 16, 16, win32con.LR_LOADFROMFILE ) win32api.SendMessage(hwnd, win32con.WM_SETICON, win32con.ICON_BIG, big_icon) win32api.SendMessage(hwnd, win32con.WM_SETICON, win32con.ICON_SMALL, small_icon)
备注:内容来源于stack exchange,提问作者Elexsizz




