Как изменить иконку exe файла python

I have been all over Google, Reddit, StackOverflow, PyInstaller docs, I can't figure this out. I'm trying to set my icon for my application, but it will not work. The icon is applied to the main e...

I have been all over Google, Reddit, StackOverflow, PyInstaller docs, I can’t figure this out.

I’m trying to set my icon for my application, but it will not work. The icon is applied to the main exe, however, the icon does not show in the taskbar when it is open for Windows.

The icon is being included. I have set the value icon in EXE directly to the icon path. I have used Resource Hacker, I have used RCEDIT, which by the way, kills my application entirely. I, for the life of me, CANNOT get the icon of the application to show correctly.

I have tried Windows 10 and Windows 7.

Even when I run Pyinstaller without -F, it still won’t load the icon. I’m 100% certain my file is an .ico file, and includes multiple acceptable sizes, Resource Hacker showed all acceptable sizes for the .ico.


  • Title Bar of the App
  • App with the right icon, in the directory
  • App icon on the taskbar

Here is the powershell command I’m using:

pyinstaller -F -i C:aNotethemeanoteicon.ico --clean anotemain.spec

Here is my .spec

# -*- mode: python -*-

block_cipher = None


a = Analysis(['anotemain.py'],
             pathex=['C:\aNote'],
             binaries=[],
             datas=[('c:\aNote\theme\anoteicon.png','theme'), 
             ('c:\aNote\theme\kabook.png','theme'), 
             ('c:\aNote\theme\Python.svg.png','theme'), 
             ('c:\aNote\theme\anoteicon.ico','.'), 
             ('c:\aNote\anoteui.py','.'),
             ('c:\aNote\version.txt','.')],
             hiddenimports=["PyQt5.sip", "QtGui", "QtWidgets", "pyperclip", "webbrowser", "csv"],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='aNote',
          debug=False,
          strip=False,
          upx=False,
          clean=True,
          runtime_tmpdir=None,
          console=False,
          icon='c:\aNote\theme\anoteicon.ico',
          version='version.txt')

I have been all over Google, Reddit, StackOverflow, PyInstaller docs, I can’t figure this out.

I’m trying to set my icon for my application, but it will not work. The icon is applied to the main exe, however, the icon does not show in the taskbar when it is open for Windows.

The icon is being included. I have set the value icon in EXE directly to the icon path. I have used Resource Hacker, I have used RCEDIT, which by the way, kills my application entirely. I, for the life of me, CANNOT get the icon of the application to show correctly.

I have tried Windows 10 and Windows 7.

Even when I run Pyinstaller without -F, it still won’t load the icon. I’m 100% certain my file is an .ico file, and includes multiple acceptable sizes, Resource Hacker showed all acceptable sizes for the .ico.


  • Title Bar of the App
  • App with the right icon, in the directory
  • App icon on the taskbar

Here is the powershell command I’m using:

pyinstaller -F -i C:aNotethemeanoteicon.ico --clean anotemain.spec

Here is my .spec

# -*- mode: python -*-

block_cipher = None


a = Analysis(['anotemain.py'],
             pathex=['C:\aNote'],
             binaries=[],
             datas=[('c:\aNote\theme\anoteicon.png','theme'), 
             ('c:\aNote\theme\kabook.png','theme'), 
             ('c:\aNote\theme\Python.svg.png','theme'), 
             ('c:\aNote\theme\anoteicon.ico','.'), 
             ('c:\aNote\anoteui.py','.'),
             ('c:\aNote\version.txt','.')],
             hiddenimports=["PyQt5.sip", "QtGui", "QtWidgets", "pyperclip", "webbrowser", "csv"],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='aNote',
          debug=False,
          strip=False,
          upx=False,
          clean=True,
          runtime_tmpdir=None,
          console=False,
          icon='c:\aNote\theme\anoteicon.ico',
          version='version.txt')



July 19, 2020July 20, 2020

In previous article, we have discussed about most of the commonly used options for PyInstaller library. There are two more very useful options but you may encounter some issues when you use them for the first time. In this article, we will discuss about the common issues for using PyInstaller –icon and –upxdir options.

Customize icon for your exe file with –icon

PyInstaller has the –icon option to specify your own icon when creating the executable file. If this option is not given, the exe files will be generated with default icon as per below.

pyinstaller logo

You can use –icon followed by image file name to let PyInstaller to use your own icon. You may see errors when you try to use a normal image format as icon, in this case you can convert your image file into .ico format and run the command again.

For demo purpose, I downloaded an icon from this website into my project folder to use it for my app. And with the below command, I shall be able to get new look for my exe file.

pyinstaller --onefile hello.py --name "SuperHero" --add-data "test.config;." --icon "superhero.icon" --clean

Below is how it looks like when the new exe file generated:

Pyinstaller generate exe with icon

Sometimes, you may also find that the icon did not get changed after you rebuilt the executable file, but when checking the “General” tab in file properties, you are able to see the new icon displayed. This is due to the window icon cache, you may try to delete the cache files from the below directory and retry.

UserAppDataLocalMicrosoftWindowsExplorerIconCacheToDelete

Or if you specify a new name for your exe file, you shall be able to see the new icon applied.

Reduce file size with PyInstaller –upx-dir option

When you used a lot of libraries or resource files, your executable file can grow very big and become difficult for distribution. In this case, you can use upx to compress your exe file.

You can download the upx executable file into your PC and copy the full path as the parameter value for –upx-dir option. E.g.:

pyinstaller --onefile hello.py --name "SuperHero" --add-data "test.config;." --icon "superhero.icon" --upx-dir "c:upx-3.96-win64" --clean

Sometimes you may find even there is no error when you build the executable file, there can be a runtime error such as the below, which showing that VCRUNTIME140.dll is either not designed to run on Windows or it contains an error.

pyinstaller-VCRUNTIME140.dll-error

This issue is due to PyInstaller modified the dll files during packing and compressing. The workaround is that you use the –upx-exclude to exclude the particular dll files. (No need to specify the path for the dll)

pyinstaller --onefile hello.py --name "SuperHero" --add-data "test.config;." --icon "superhero.icon" --upx-dir "c:upx-3.96-win64" --upx-exclude "VCRUNTIME140.dll" --clean

Conclusion

Beside the above issues we discussed, you may occasional encounter some other errors, you will need to check  both your Python and PyInstaller versions to see if is it some compatibility issues. And also not all the Python libraries are supported by PyInstaller, you will need to check this list to see if you have used any libraries not in supported by PyInstaller.

Post tagspyinstaller

You may also like

Бывают случаи, когда вы хотите добавить что-то необычное в строку заголовка вашего приложения. Лучше всего для этого подойдут изображения. Большинство приложений для Windows имеют лого в верхнем левом углу строки заголовка. Когда вы запускаете wxPython, то он использует стандартную иконку. В данной статье мы рассмотрим три разных метода вставки иконки в строку заголовка.

Извлечение изображения из исполняемого файла

Давайте начнём процесс обучения с извлечения иконки из исполняемого файла. На самом деле, это очень просто. Вот вам мега-простой пример:

import wx

class MyForm(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, title=‘Image Extractor’)

        self.panel = wx.Panel(self)

        loc = wx.IconLocation(r‘C:Python35python.exe’, 0)

        self.SetIcon(wx.Icon(loc))

if __name__ == ‘__main__’:

    app = wx.App(False)

    frame = MyForm().Show()

    app.MainLoop()

В этом примере, я извлекаю иконку Python 3.5 из файла python.exe используя следующую строку:

loc = wx.Icon(r‘C:Python27python.exe’, 0)

Затем, я задаю рамку используя SetIcon(). Обратите внимание, что нам нужно всего лишь извлечь иконку из инстанции IconLocation. Если вы пользуетесь wxPython Classic, вам нужно будет заменить обращение к wx.Icon на wx.IconFromLocation.

Когда вы запустите код, вы должны увидеть следующее:

Как вставить иконку в строку заголовка - wxPython #3

Вы заметите, что в верхнем левом углу данного скриншота появилось лого Python. А теперь попробуйте отредактировать две последние строки класса методом __init__ и перезапустите код. Вы должны будете увидеть что-то вроде этого:

Как вставить иконку в строку заголовка - wxPython #3

В верхнем левом углу вы увидите стандартное изображение, которое wxPython использует, когда вы не задали иконку самостоятельно.

Использование собственной иконки

Использование вашего собственного изображения, на самом деле, выполнить проще, чем извлечение из exe файла. Основным отличием предыдущего кода от следующего является то, что я избавился от обращения к wx.IconLocation и wx.IconFromLocation, а также добавил объект wx.Icon. Объекту wx.Icon нужны только путь к расположению иконки и флаг wx.BITMAP_TYPE_ICO.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Давайте посмотрим на то, как это изменило сам код:

import wx

class MyForm(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, title=‘Custom Image’)

        self.panel = wx.Panel(self, wx.ID_ANY)

        ico = wx.Icon(‘py.ico’, wx.BITMAP_TYPE_ICO)

        self.SetIcon(ico)

if __name__ == ‘__main__’:

    app = wx.App(False)

    frame = MyForm().Show()

    app.MainLoop()

Перед запуском данного кода, вы должны найти собственную иконку и изменить код таким образом, чтобы она использовалась. Я, например, взял иконку Python которая была у меня на компьютере. Вообще-то это лого фреймворка wxPython, которое вы обнаружите и у себя на компьютере после установки wxPython.

Приложение, сгенерированное данным кодом, имело следующий вид:

Как вставить иконку в строку заголовка - wxPython #3

Теперь мы можем перейти к последнему способу добавления изображения в строку заголовка.

Создание изображения в коде Python

Последний способ я считаю самым лучшим. Здесь я покажу вам как взять иконку или изображение и превратить его в python-файл используя утилиту wxPython img2py.

С чего бы ему быть лучшим?

Потому, что, вставляя файл изображения в python-файл вы значительно упрощаете процедуру распространения (извлечения) вашего приложения с помощью py2exe. По крайней мере, так было в моём случае.

У меня на компьютере утилита img2py расположена в папке со скриптами Python. Также я нашёл её в Python site-packages под названием site-packageswx-3.0-mswwxtools (измените этот параметр таким образом, чтобы он соответствовал установленной у вас версии wxPython).

Чтобы упростить процесс, я настоятельно рекомендую открыть терминал и указать путь к папке, где расположен файл вашей иконки. После этого, вам останется лишь ввести данную команду:

img2py python.ico my_icon.py

Первый аргумент для img2py.py это -і, который сообщает утилите, что вы вставляете иконку. Дальше следует путь к файлу иконки. Наконец, вы задаёте название файла, который нужно создать или вставить (например, иконку). Теперь, скопируйте созданный вами python-файл в папку, содержащую ваш скрипт, чтобы тот мог импортировать иконку. Вы можете также перенести код из python-файла в текст приложения, которое вы создаёте.

Обратите внимание: Если вы используете Windows, img2py.exe будет расположена в папке Scripts, которая, в свою очередь, находится в папке, в которую вы установили Python. В противном случае, вам нужно будет пройти в место, где установлен Python, и указать папку tools, чтобы запустить скрипт напрямую.

Кстати, img2py имеет несколько опций командной строки, которые могут вам пригодится. Попробуйте запустить img2py без каких-либо аргументов, чтобы отобразилась главная страница и вы моги ознакомится со всеми доступными командами.

В данном примере я собираюсь импортировать модуль нашего нового изображения. Для получения иконки, вам нужно использовать метод GetIcon() на файле иконки в импортированной мной инстанции PyEmbeddedImage. Чтобы вам было легче понять, что я делаю – просмотрите код, расположенный ниже. Вам, наверное, также хочется открыть сгенерированный мной python-файл, чтобы увидеть, как он выглядит.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import wx

import my_icon

class MyForm(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, title=‘Python Image Title’)

        self.panel = wx.Panel(self, wx.ID_ANY)

        ico = my_icon.python.GetIcon()

        self.SetIcon(ico)

# Запустите программу

if __name__ == ‘__main__’:

    app = wx.App(False)

    frame = MyForm().Show()

    app.MainLoop()

Приложение, созданное этим кодом должно выглядеть также, как то, что мы создали ранее. Единственным отличием является текст заголовка.

Подведем итоги

Надеюсь, что данная статья научила вас вставлять иконку в строку заголовка вашего приложения. Помните, что вы можете использовать данную технику для любого изображения, которое вы хотите вставить в своё приложение, а не только для иконки в командной строке. Также этот метод подойдёт для вставки иконки в панель задач или же панель инструментов. Удачи!

Продолжение

Следующий урок №4: Как поставить фоновое изображение на приложение

Предыдущий урок №2: Как сделать скриншот вашего приложения

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: vasile.buldumac@ati.utm.md

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Вопрос:

Я разрабатываю игру на Python и задаюсь вопросом, как дать ей свой значок. Я использую компьютер с Windows и не устанавливаю никаких дополнительных функций с Python. О, я также использую версию 3.3. Возможно ли это.

P.S Я нашел другие вещи в Stack Overflow, но они используют разные компьютеры, такие как Ubuntu и Macintosh

Лучший ответ:

Есть два шага: сначала создайте исполняемый файл Python. Для этого вам понадобится что-то вроде py2exe, который преобразует скрипты Python в исполняемые программы Windows, которые могут запускаться без необходимости установки Python. “

Затем, как только у вас будет свой исполняемый файл, чтобы дать ему значок, вы можете использовать ответ на этот вопрос: Добавить значок в существующий EXE файл из командной строки
 для этого завершающего касания.

Ответ №1

Вы не можете добавить пользовательский значок в простой скрипт Python, но если вы преобразуете его в исполняемый файл Windows, используя py2exe, вы можете указать ресурсы значков, которые будут использоваться для него. Там есть инструкции на их вики.

Ответ №2

Вы не можете. В Windows пользовательские значки могут быть назначены только определенным типам файлов (обычно исполняемые файлы и ярлыки), а скрипты Python не являются одним из этих типов.

Ответ №3

Если вы пытаетесь изменить значок ярлыка для вашей программы

  • тогда вам нужно попасть в файл, где он когда-либо щелкнул правой кнопкой мыши и запустил ярлык

  • затем перетащите этот ярлык на рабочий стол youre

  • затем щелкните правой кнопкой мыши этот ярлык и щелкните свойства

  • затем нажмите “Изменить значок”

  • затем перейдите к месту сохранения вашего изображения .ico и установите его как значок

если вы сделаете это, и вы откроете свою программу в углу, будет выбран .ico, и на рабочем столе youre будет отображаться значок ico вместо изображения python.

как вы меняете значок ярлыка, но нет способа изменить значок окна в углу, если вы не используете что-то вроде Tk или Pygame

Ответ №4

Ответ №5

Py2Exe остановил разработку на python 3.4 и не будет работать с более новыми версиями. PyInstaller также сделает это.

pip install pyinstaller
pyinstaller --onefile --windowed --icon=youricon.ico yourprogram.py

Python версия 3.7.3.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить иконки ярлыков на рабочем столе
  • Как изменить иконки ярлыка
  • Как изменить иконки фотографий были видны
  • Как изменить иконки телефоне ксиоми
  • Как изменить иконки системных папок

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии