Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2023 01:32:12

NewStudent
Зарегистрирован: 2022-12-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Python компиляция в .exe с вшитием (сохранением) иконки окна приложения.

Доброй ночи!

Написал несколько программ, не без данного форума, всё начало отлично получаться.

Уже начал заниматься “марафетом” своих программ и столкнулся с тем, что не понимаю, как вшить в .exe иконку самого окна (toolbar)приложения.

Мне удалось сохранить иконку самого .exe, что при переноси его на другой носитель без файла .ico иконка не исчезает, а вот с значком (иконкой) окна приложения какие то проблемы.

Вот что я пробовал:


 pyinstaller --onefile --noconsole --add-binary=".../.ico;." --name [name] --icon=C:\Users\...\...\....\.ico
[name]

Пробовал просто
 pyinstaller Icon=
, пробовал data–add и т.д.

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

Делал на
 import PySimpleGUI as sg

Добавлял
# Создать окно
 window = sg.Window('name', layout, grab_anywhere=True, resizable=True, icon=('.../.ico')

Делал просто icon= без пути, а просто добавлял имя файла (так как он был в той же самой директории)

Ничего не помогает и хочется понять это возможно. Знаю что можно на каком-нибудь файлобменнике разместить картинку и использовать её, но мне интересно именно вшить её в .exe

Спасибо за ответы и помощь!

Отредактировано NewStudent (Апрель 10, 2023 01:37:14)

Офлайн

#2 Апрель 30, 2023 14:48:11

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Python компиляция в .exe с вшитием (сохранением) иконки окна приложения.

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

 from base64 import b64encode
with open(".../.ico", "rb") as x:
    d = x.read()
print(b64encode(d).decode())
После этого полученный текст вставь в переменную внутрь кода как строчку
 from base64 import b64decode
d = """
BASE64 ENCODED ICON
"""
icon_data = b64decode(d.encode())
Если PySimpleGUI не позволяет использовать иконки из оперативки, то запиши переменную “icon_data” во временный файл с тем же расширением и используй его.
P.S. можно не использовать бейс 64, а вписать просто как массив байтов, я просто так привык



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Апрель 30, 2023 14:49:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version