Значок приложения в PySide GUI
у меня есть приложение PySide GUI (написано на Python 3, работает на Windows 7 Pro), в котором я устанавливаю значок приложения следующим образом:
class MyGui(QtGui.QWidget):
def __init__(self):
super(MyGui, self).__init__()
...
self.setWindowIcon(QtGui.QIcon('MyGui.ico'))
if os.name == 'nt':
# This is needed to display the app icon on the taskbar on Windows 7
import ctypes
myappid = 'MyOrganization.MyGui.1.0.0' # arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
...
понял, что ctypes
вещи из ответ. Если я удалю эти строки, то значок Python будет отображаться на панели задач при выполнении python MyGui.py
.
С этими строками в комплекте все выглядит отлично, с правильным значком на окне и панели задач. Однако, когда я упаковываю gui с помощью cxfreeze, оба значки окна и панели задач изменяются на общие окна.значок exe.
я использую cxfreeze.bat
чтобы упаковать приложение, используя найденные инструкции здесь, включая --icon
переключатель. Использование этого переключателя делает сгенерированный exe правильным значком при просмотре в проводнике. Однако окно приложения и панель задач не показывают значок при запуске приложения. Я пробовал копировать .ICO-файл в том же каталоге, как .но это не помогает.
я получаю такое же поведение в Windows 7 и 8. Любопытно, что если я прикрепляю приложение к панели задач, значок панели задач отображается правильно, но значок окна по-прежнему является общим значком exe.
Как правильно отобразить значок?
2 ответов
PySide нужен доступ к специальной DLL для чтения .файлы ico. Я думаю, это qico4.файл DLL.
вы можете попробовать изменить вызов setWindowIcon, чтобы открыть значок как a .png и поставить .ПНГ в ./ dist каталог и посмотреть, работает ли это. Если да, то ваш код в порядке, и я уверен, что это так .проблема с dll. Вам нужно будет сказать cx_freeze, чтобы включить dll в сборку.
Я думаю, что PySide предоставляет встроенный .ico для Windows и не нужно уметь читать сами данные, вот почему это работает. Однако для чтения встроенного ресурса значка или файла ico в исполняемом каталоге ему понадобится DLL.
Я нашел другое решение, которое не требует наличия значка в форматах PNG и ICO. Как упоминает Саймон в своем ответе,qico4.dll файлы требуется для чтения .файлы ico. Кроме того, этот файл должен быть помещен в каталог с именем imageformats
это подкаталог вашего каталога приложений. Структура папок должна выглядеть следующим образом:
My Gui
|
|-- MyGui.exe
|-- QtCore4.dll
|-- QtGui4.dll
|-- ...
|
|-- imageformats
|
|-- qico4.dll
qico4.dll файлы устанавливается с вашим дистрибутивом PySide. Если вы выбираете типичные параметры установки, файл должно быть под
os.path.join(os.path.dirname(sys.executable),
'Lib',
'site-packages',
'PySide',
'plugins',
'imageformats' )