У меня есть личный проект, который представляет собой настольное приложение elixir для ПК с Windows. Это работает довольно хорошо, но теперь я хочу дать ему значок.
Обычно это делается в следующем модуле:
defmodule WebInterface.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
alias Desktop
alias Manager
alias WebInterface.{Endpoint, Telemetry}
alias WebInterface.Live.MenuBar
@impl true
def start(_type, _args) do
children = [
Telemetry,
{Phoenix.PubSub, name: WebInterface.PubSub},
Endpoint,
Manager,
{Desktop.Window,
[
app: :web_interface,
id: WebInterface,
title: "Market Manager",
size: {900, 960},
menubar: MenuBar,
icon: "static/images/resized_logo_4.png", # THIS IS WHERE THE ICON IS SET
url: &WebInterface.Endpoint.url/0
]}
]
opts = [strategy: :one_for_one, name: WebInterface.Supervisor]
Supervisor.start_link(children, opts)
end
@impl true
def config_change(changed, _new, removed) do
WebInterface.Endpoint.config_change(changed, removed)
:ok
end
end
Проблема здесь в том, что я должен использовать одно и то же изображение как для панели задач Windows, так и для верхнего значка приложения:
Проблема здесь в том, что хотя логотип на нижней панели Windows (отмечен желтым цветом) выглядит красиво, логотип наверху искажен и довольно ужасен.
Исправление этого было бы в том, чтобы иметь значок для нижней части и один для верхней части. Однако после проверки демо-приложения я не нашел способа сделать это.
Возможно ли это достичь? Если да, то как?
На моем локальном компьютере установлена последняя загружаемая версия с веб-сайта wxwidgets (последний стабильный выпуск: 3.2.1). Вы предлагаете, что эта версия устарела?
как насчет wxPython? Я не знаю/не помню, на чем основан их последний релиз...
Я не пробовал wxPython. Честно говоря, я не уверен, как wxPython и wxWidgets связаны друг с другом. Я не могу удалить wxWidgets и установить wxPython, после чего все заработает, как раньше.
Кроме того, это также заставит моих пользователей устанавливать Python на локальные машины, а это слишком много, чтобы просить.





На уровне wxWidgets API вы можете указать значки разных размеров, используя wxTopLevelWindow::SetIcons() (обратите внимание на «s»), но я не знаю, доступна ли эта функция в привязках Erlang.
Альтернативой может быть использование значка из ресурсов Windows, но, опять же, не уверен, что вы можете использовать пользовательские ресурсы для приложения Erlang.
Спросив в нескольких местах, я смог найти некоторые ответы. На самом деле этот пост можно резюмировать двумя вопросами:
После проверки на официальных форумах wxWidgets и получения помощи от милых людей там мне указали, что мои значки не соответствуют стандартам MSW для значков. В моем случае это должны были быть 32x32 или 16x16.
Исследовательская работа:
Этот немного сложнее. Есть шанс, что при непосредственном использовании wxWidgets это могло быть возможно с помощью наложенных значков. Однако привязка библиотеки, которую я использую, elixir-desktop, не поддерживает это, а это значит, что значки должны быть одинаковыми.
Это, вероятно, к лучшему, потому что, как упоминалось сообществом wxWidgets, даже такое использование оверлейных значков не было бы стандартным для приложений MSW, как в моем случае.
Исследовательская работа:
Я думаю, вам нужно собрать wx{Widgets,Python} из последней версии самостоятельно, чтобы исправить размытие значков.