Как поставить иконку для exe файла на Python чтобы файл можно было открыть на всех пк

Рейтинг: 3Ответов: 2Опубликовано: 08.08.2023

Пытался поставить иконку для приложения на Python пишу программу на CustomTkinter app.iconbitmap(r'D:\Explore\logo.ico')И в pyinstaller pyinstaller --onefile --icon=logo.ico -w main.py на моем пк оно открываеться без ошибок но если перекинуть программу на другой пк о вылазит ошибка с неудачей в поиске директории D:\Explore\logo.ico как вшить иконку в файл для всех пк??

Ответы

▲ 1

Поместите файл иконки в ту же папку, где находится скомпилированный exe-файл. В коде укажите относительный путь (а не абсолютный как у вас) к иконке:

import os
import sys

icon_path = os.path.join(os.path.dirname(sys.executable), 'logo.ico')  
app.iconbitmap(icon_path)

При компиляции добавить иконку в один файл:

pyinstaller --onefile --icon=logo.ico -w main.py
▲ 0

Не совсем нормальный способ, но можно положить ico-файл прямо в код приложения:

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

import base64

# Преобразование изображения в строку base64
with open('test.ico', 'rb') as image:
    binary_icon = base64.b64encode(image.read())
# Полученный binary_icon выводим (на печать, в файл) и хардкодим в итоговом приложении
# Внутри итогового приложения

import base64

# Преобразование строки base64 в изображение
binary_icon = b'AAABAAkAAAAQAAEABAC5ZgAAlgAAAEBAEAABAAQAaAoAA...'  # очень большая строка
with open('test_icon.ico', 'wb') as image:
    image.write(base64.b64decode(binary_icon))
# Сгенерированный файл .ico используем в функциях установки иконки