Значок окна Exe в PyQt4

У меня есть небольшая программа в PyQt4, и я хочу скомпилировать программу в Exe. Я использую py2exe для этого. Я могу успешно установить значок в строке заголовка Windows, используя следующий код, но когда я компилирую его в 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_())

**** Вот 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"]}})

person realz    schedule 22.02.2010    source источник


Ответы (4)


Проблема в том, что 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"]}})
person Jesse Aldridge    schedule 24.03.2011
comment
Просто идеально. Точно решить мою проблему. Ps этот трюк работает и для PySide. - person Pinch; 24.03.2012
comment
У меня похожая установка, но она не работает. Не могли бы вы взглянуть на это? stackoverflow.com/ вопросы/17687347/ - person ArtOfWarfare; 17.07.2013
comment
Что вам нужно изменить, чтобы это работало с параметрами -> bundle_files, установленными на 1? - person ArtOfWarfare; 17.07.2013

Я считаю, что вам нужно ссылаться на файл .ico непосредственно из EXE или DLL, которые вы создаете с помощью py2exe. Кажется, у вас правильный сценарий setup.py, поэтому взгляните на: http://www.py2exe.org/index.cgi/CustomIcons. Есть пример для wxWidgets, но вы можете попробовать адаптировать его для Qt.

person swanson    schedule 22.02.2010

Я предлагаю вам создать файл с именем YourApp.rc, добавить следующую строку:

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

Затем в файле .PRO добавьте следующие строки:

win32{
RC_FILE = YourApp.rc
}

Это должно решить вашу проблему!

person Andy M    schedule 23.02.2010
comment
Какой .PRO файл? Py2exe использует setup.py. Этот ответ не имеет смысла. - person James; 12.11.2010
comment
Да, мой плохой, я думал, что они используют тот же процесс, что и в C++. Последняя часть вашего комментария не нужна. - person Andy M; 13.11.2010

Я была такая же проблема. По какой-то причине он отлично работал с файлом image.png, а не с файлом image.ico. Не знаю, почему. Но я преобразовал ico в png, и это сработало.

person marcus trenton    schedule 23.01.2017