本站已搬家!

本站已搬家至https://blog.typeart.cc


歡迎舊雨新知指教!

PyQt + pyinstaller,win工作列icon未正確顯示的問題

PyQt + pyinstaller,win工作列icon未正確顯示的問題

程式都完成了,最後為了一個小小的ICON,居然又折騰了一天…
在程式裡用

app.setWindowIcon(QIcon('icon.ico'))

開發環境下執行都正常,用pyinstaller打包後,ICON雖有顯示
但執行程式時,在WIN下的工作列卻是醜醜的程式框框圖

一搜尋馬上就發現也有人遇到一樣的問題:stack overflow/How to set application’s taskbar icon in Windows 7

但照著做,卻仍是沒icon。

查了許多篇似乎都指向pyinstaller的問題(github/Do not have a default-icon)
但看文章時間都是4年前的時間了!一度跑去看pyinstaller的程式碼,感覺又像已修正過-.-

還試過直接去把pyinstaller的預設ico改成我自己的,再打包
仍是不行

最後,總算找到解決方法:
把icon打包至PyQt的qrc裡面,再從程式裡setWindowIcon

詳細作法:

  1. 新增一個icon.qrc的檔案,內容如下:

    <RCC>
      <qresource prefix="/" >
        <file>icon/anotherIcon.ico</file> //若是在其他目錄
        <file>icon.ico</file> //若是跟程式同一層目錄
      </qresource>
    </RCC>
    
  1. CD到專案目錄,執行:
    pyrcc5 -o iconQrc.py icon.qrc
    
  1. 到主程式修改你的setWindowIcon的ICON路徑,前面加冒號「:」
    import iconQrc.py
    # your code
    app.setWindowIcon(QtGui.QIcon(':/icon.ico')) #若ICON在同一層目錄
    
    app.setWindowIcon(QtGui.QIcon(':/icon/anotherIcon.ico')) #若ICON在子目錄
    
    

  1. 存檔,再使用pyinstaller打包。icon正常顯示。

參考資料

用 PyInstaller 打包基于 PyQt 的程序遇到的坑

留言