2010-02-22 38 views
10

我在PyQt4中有一個小程序,我想將程序編譯成Exe。我正在使用py2exe來做到這一點。我可以使用下面的代碼在Windows標題欄中成功設置圖標,但是當我將它編譯爲exe時,圖標會丟失,並且我會看到默認的Windows應用程序。這裏是我的程序:PyQt4中Exe的窗口圖標

import sys 
from PyQt4 import QtGui 


class Icon(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('Icon') 
     self.setWindowIcon(QtGui.QIcon('c:/python26_/repy26/icons/iqor1.ico')) 


app = QtGui.QApplication(sys.argv) 
icon = Icon() 
icon.show() 
sys.exit(app.exec_()) 

****這裏是setup.py對py2exe ****

from distutils.core import setup 
import py2exe 

setup(windows=[{"script":"iconqt.py" 
       ,"icon_resources": [(1, "Iqor1.ico")]}] 
        ,options={"py2exe":{"includes":["sip", "PyQt4.QtCore"]}}) 

回答

0

我會建議你創建一個名爲YourApp.rc文件,添加了以下行:在你的.pro文件

IDI_ICON1 ICON DISCARDABLE "res/icons/app_icon.ico" 

然後,添加了下面幾行:

win32{ 
RC_FILE = YourApp.rc 
} 

它應該解決你的問題!

+0

什麼.PRO文件? Py2exe使用setup.py。這個答案沒有意義。 – James 2010-11-12 19:10:50

+1

是的,我的糟糕,我認爲他們使用了與C++中相同的過程。您評論的最後部分是不必要的。 – 2010-11-13 09:35:49

15

問題是,py2exe不包括qt圖標閱讀器插件。你需要告訴它包含它與data_files參數。沿着這些路線的東西:

setup(windows=[{"script":script_path, 
       "icon_resources":[(1, icon_path)]}], 
     data_files = [ 
      ('imageformats', [ 
       r'C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats\qico4.dll' 
       ])], 
     options={"py2exe":{"packages":["gzip"], 
         "includes":["sip"]}}) 
+3

完美無缺。正確解決我的問題。 Ps這個技巧也適用於PySide。 – Pinch 2012-03-24 14:15:22

+1

謝謝!它也適用於我。 – Meloun 2013-06-04 08:39:41

+0

我有一個類似的設置,但它不工作。你介意看看它嗎? http://stackoverflow.com/questions/17687347/win7-taskbar-icon-incorrect-for-pyside-py2exe-app – ArtOfWarfare 2013-07-17 12:15:02

0

我有同樣的問題。出於某種原因,它的工作很好,image.png文件&不是一個image.ico文件。不知道爲什麼。但我轉換ico到png &它工作