Форум сайта python.su
Всем привет! Такой глюк только у меня или нет: иконка у приложения после компиляции есть, но при нажатии ALT+TAB иконка в списке выбора окон не отображается. В версии птона 2.5 все было ок. Сейчас стоит Питон 2.6 и py2exe-0.6.9.win32-py2.6.
Вот скрипт который в exe загоняет:
from distutils.core import setup
import glob
import py2exe
import sys
inclArr = ['sip',
]
data_files = [(".", glob.glob ("C:/windows/system32/msvcr71.dll")),
(".", glob.glob ("C:/windows/system32/msvcr90.dll")),
("img", glob.glob ("img/*"))]
if len(sys.argv) == 1:
sys.argv.append("py2exe")
sys.argv.append("-q")
setup(windows=[{"script": "script.py",
"icon_resources": [(1, "img/icon.ico")]}],
options={'py2exe': {'includes': inclArr}},
data_files=data_files
)
Офлайн
приложение запущено, через алт+таб иконка не видна, или видно но стандартная для Фрейма?
Офлайн
SAntyВидна стандартная для фрейма. Но если “откмпилить” как консольное приложение, то при запуске появляется консоль и само приложение. Так вот по альтабу у консоли моя иконка, а у приложения - стандартная для фрейма.
приложение запущено, через алт+таб иконка не видна, или видно но стандартная для Фрейма?
Офлайн
Если вы прописали параметр ‘icon_resources’ в setup.py, а у вас показывает иконку фрейма, нужно фрейму присвоить иконку в програме.
Непомню как в QT, а в wxWindows это делаеться в конструкторе фрейма:
class MyFrame(wx.Frame):
def __init__(self, parent, ID, title, pos=wx.DefaultPosition,
size=(200, 200), style=wx.DEFAULT_FRAME_STYLE | wx.ICONIZE):
wx.Frame.__init__(self, parent, ID, title, pos, size, style)
iconFile = "img/PYPE.ICO"
icon1 = wx.Icon(iconFile, wx.BITMAP_TYPE_ICO)
self.SetIcon(icon1)
Офлайн
SAntyУ меня так прописано:
Если вы прописали параметр ‘icon_resources’ в setup.py, а у вас показывает иконку фрейма, нужно фрейму присвоить иконку в програме.
Непомню как в QT, а в wxWindows это делаеться в конструкторе фрейма:class MyFrame(wx.Frame):
def __init__(self, parent, ID, title, pos=wx.DefaultPosition,
size=(200, 200), style=wx.DEFAULT_FRAME_STYLE | wx.ICONIZE):
wx.Frame.__init__(self, parent, ID, title, pos, size, style)
iconFile = "img/PYPE.ICO"
icon1 = wx.Icon(iconFile, wx.BITMAP_TYPE_ICO)
self.SetIcon(icon1)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("img/icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
Офлайн
У меня та же история.
Файл 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))
...........................дальше все остальное.......................................
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())
# -*- 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']),
]
)
Офлайн
мож иконку в ресурсы запихнуть?
Офлайн
Ресурсы Qt?
Это конечно хорошее предложение. Надо попробовать, но мне нужны внешние файлы.
И в досовском окне есть иконка, она кстати встраивается как ресурс в EXE файле. Далее иконки в меню и в панели задач видит, они тоже внешние, выборочно не видит только иконку виджета и иконку в трее, так что мне кажется что это не поможет, тем более противоречит задаче (в моем случае), а именно грузить картинки извне… :(
Офлайн
Иконка в ресурсах должна идти под индексом 0.
setup(windows=[{“script”: “script.py”,
“icon_resources”: }],
options={'py2exe': {'includes': inclArr}},
data_files=data_files
)
Офлайн
К сожалению это не меняет ситуацию… Для досовского окна есть иконка а вот Qt со стандартной…
Офлайн