You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

  • 同时使用iconbitmapiconphoto
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

火山引擎 最新活动