PyQt4中Exe的窗口图标

10 投票
4 回答
8122 浏览
提问于 2025-04-15 19:35

我有一个用PyQt4写的小程序,我想把这个程序编译成一个Exe文件。我正在使用py2exe来实现这个目标。我可以成功地在窗口的标题栏上设置图标,使用以下代码,但是当我把它编译成exe文件时,图标就消失了,变成了默认的Windows应用程序图标。以下是我的程序:

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_())

**** 这是用于py2exe的setup.py文件****

from distutils.core import setup
import py2exe

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

4 个回答

0

我建议你创建一个叫做 YourApp.rc 的文件,然后在里面添加以下内容:

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

接着在你的 .PRO 文件中,添加以下内容:

win32{
RC_FILE = YourApp.rc
}

这样应该能解决你的问题!

3

我觉得你需要直接从你用 py2exe 创建的 EXE 或 DLL 文件中引用 .ico 文件。看起来你的 setup.py 脚本写得没问题,所以可以看看这个链接:http://www.py2exe.org/index.cgi/CustomIcons。里面有一个关于 wxWidgets 的例子,但你可以试着把它改成适合 Qt 的。

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"]}})

撰写回答