У меня та же история.
Файл ui_mainwindow.py
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.resize(1024, 768)
MainWindow.setWindowIcon(QtGui.QIcon('data/200.ico'))
# создание трея и МЕНЮ к нему:
self.quitAction = QtGui.QAction(QtGui.QIcon('data/icon1.png'),u'&Выход', self)
self.showAction = QtGui.QAction(QtGui.QIcon('data/icon3.png'),u'&Восстановить', self)
#
#QtCore.QObject.connect(self.quitAction, QtCore.SIGNAL('triggered()'), QtGui.qApp, QtCore.SLOT('quit()'))
QtCore.QObject.connect(self.quitAction, QtCore.SIGNAL('triggered()'), self.exiGame)
QtCore.QObject.connect(self.showAction, QtCore.SIGNAL('triggered()'), self.notrayGo)
#
self.trayIconMenu = QtGui.QMenu(self)
#
self.trayIconMenu.addAction(self.quitAction)
self.trayIconMenu.addAction(self.showAction)
#
self.trayIconPixmap = QtGui.QPixmap('data/200.ico') # файл иконки
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setContextMenu(self.trayIconMenu)
self.trayIcon.setIcon(QtGui.QIcon(self.trayIconPixmap))
...........................дальше все остальное.......................................
файл webbrowser.py
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
MainWindow._window_list.append(self)
self.setupUi(self)
#флаг полного открытия окна
self.fullScreen = False
#флаг максимизации окна
self.maximize = self.isMaximized()
if __name__ == "__main__":
def exitGame():
a.exec_()
try:
#удаляем темп и все что в нем есть
cpth = ntpath.abspath(os.curdir)
shutil.rmtree(cpth+"\\game\\tmp")
except:
print "нельзя удалить папку TMP"
a = QtGui.QApplication(sys.argv)
a.setStyleSheet(open("data/mystyle01.qss","rb").read())
w = MainWindow()
w.show()
sys.exit(exitGame())
файл setup.py
# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe
manifest_template = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="WB" version="0.0.0.1" processorArchitecture="x86" publicKeyToken="123456789"></assemblyIdentity>
<file name="msvcr90.dll" hashalg="SHA1" hash="e0dcdcbfcb452747da530fae6b000d47c8674671">
<asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>
<dsig:DigestValue>KSaO8M0iCtPF6YEr79P1dZsnomY=</dsig:DigestValue>
</asmv2:hash>
</file>
<file name="msvcp90.dll" hashalg="SHA1" hash="81efe890e4ef2615c0bb4dda7b94bea177c86ebd">
<asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>
<dsig:DigestValue>ojDmTgpYMFRKJYkPcM6ckpYkWUU=</dsig:DigestValue>
</asmv2:hash>
</file>
<file name="msvcm90.dll" hashalg="SHA1" hash="5470081b336abd7b82c6387567a661a729483b04">
<asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>
<dsig:DigestValue>tVogb8kezDre2mXShlIqpp8ErIg=</dsig:DigestValue>
</asmv2:hash></file>
</assembly>
"""
RT_MANIFEST = 24
"""
setup(
windows = [ { 'script': 'webbrowser.py','dest_base':"Limon",'name':"Limon",'version':"0.0.1",'description':"Limon",'copyright':"C Lmon",'company_name':"Limon","icon_resources":[(200,"./data/200.ico")],'other_resources':[(RT_MANIFEST, 1, manifest_template)]}],
options = {"py2exe": {"compressed": 1, "optimize": 1, "bundle_files": 1, "excludes":'calendar',"includes" : ["sip", "PyQt4"] }},
zipfile = "lib/libW.zip",
data_files=[
('.', ['c:\Python26\DLLs\msvcp90.dll']),
('.', ['c:\Python26\DLLs\msvcr90.dll']),
('.', ['c:\Python26\DLLs\msvcm90.dll']),
('.', ['c:\Python26\DLLs\Microsoft.VC90.CRT.manifest']),
('.\data', ['data\icon1.png']),
('.\data', ['data\icon2.png']),
('.\data', ['data\icon3.png']),
('.\data', ['data\\200.ico']),
('.\data', ['data\mystyle01.qss']),
]
)
В конце концов получается екзешник Limon.exe, который в проводнике имеет иконку (./data/200.ico).
Но при запуске окно виджета не имеет этой иконки, точнее стандартная для запускающихся файлов Виндовс. Более того когда сворачиваю в трей, не видно и иконки в трее, место под нее выделяется, на клик правой клавишей реагирует а вот изображения нет.
Если откомпилировать с флагом (console = [{….), то опять же все хорошо в проводнике, т.е. есть иконка файла, если запустить, то “досовское” окно получает иконку а вот окна от Qt не получают эту иконку, хотя я явно прописал это в коде смотри выше.
Если запускать все это в питоне напрямую все работает как надо.
Еще один момент. Если убрать в коде выставление иконки виджетам Qt и откомпилировать в EXE (см setup.py но с параметром console), то в проводнике иконка есть, досовcкое окно получает иконку (видимо по факту наличия ее как ресурса в EXE), а виджеты Qt, уже понятно почему, не имеют иконки….
Резюме-вопрос, почему так может происходить. Ведь в коде явно указано что нужно повесить иконку…., причем в чистом питоне все работает, а вот в EXE уже нет… Сломал мозг себе за три дня… Версии типа - полный путь к иконкам указывать даже не рассматривайте, я проверял, это не то…
Спасибо за то что хоть прочитали :). Надеюсь что-то можно с этим сделать…