Иконка окна Exe в PyQt4
У меня небольшая программа в 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_())
**** Вот 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"]}})
Ответы
Ответ 1
Проблема заключается в том, что py2exe не включает плагин qt icon reader. Вам нужно указать, чтобы включить его с параметром 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"]}})
Ответ 2
Я считаю, что вам нужно ссылаться на файл .ico
непосредственно из EXE или DLL, которые вы создаете с помощью py2exe
. Кажется, у вас есть setup.py script правильно, поэтому взгляните на: http://www.py2exe.org/index.cgi/CustomIcons. Существует пример для wxWidgets, но вы можете попытаться адаптировать его к Qt.
Ответ 3
Я бы предложил вам создать файл под названием YourApp.rc, добавить следующую строку:
IDI_ICON1 ICON DISCARDABLE "res/icons/app_icon.ico"
Затем в файле .PRO добавьте следующие строки:
win32{
RC_FILE = YourApp.rc
}
Он должен исправить вашу проблему!
Ответ 4
У меня была такая же проблема. По какой-то причине он отлично справился с файлом image.png, а не с файлом image.ico. Не знаю, почему. Но я преобразовал ico в png, и он работал