Как выполнить приложение в системном трее на других платформах?
В Windows есть "системный лоток", в котором хранятся часы и постоянно работающие службы, такие как MSN, Steam и т.д.
Я хотел бы разработать приложение для лотков wxPython, но мне интересно, насколько хорошо он будет переноситься на другие платформы. Каков эквивалент лотка на каждой платформе и сколько потребуется ручная работа для поддержки Windows, OSX и Linux (какие оболочки, в частности, были бы самыми дружелюбными).
Ответы
Ответ 1
wx - это кросс-платформенная библиотека графического интерфейса и инструментов, поддерживающая Win32, Mac OS X, GTK +, X11, Motif, WinCE и другие. И если вы используете его классы, ваше приложение должно работать на всех этих платформах.
Для системного лотка посмотрите на wxTaskBarIcon (http://docs.wxwidgets.org/stable/wx_wxtaskbaricon.html#wxtaskbaricon).
Ответ 2
В OS X у вас есть панель меню состояния - самые правые элементы часто связаны со статусом (например, состояние батареи, подключения WiFi и т.д.).
Попробуйте найти NSStatusBar и NSMenuExtra. Это почти тривиально, чтобы превратить приложение в одно, у которого есть меню NSStatusBar и не отображается в Dock. Есть учебники вокруг о том, как это сделать.
Ответ 3
Для многих настольных систем Linux (Gnome, KDE и т.д.) реализован Freedesktop SysTray Protocol. Вы можете попробовать это, если какое-либо другое решение не удастся.
Ответ 4
В Linux это действительно зависит - у вас там разные среды программирования, и у некоторых оконных менеджеров даже нет области лотка. Altho, если вы используете Gtk (и wx - действительно Gtk), gtk.StatusIcon является вашим другом.
Вот несколько примеров этого (не проверяли, действительно ли они работают, но должны показать вам путь).
Для wx
я нашел здесь пример кода здесь.
Ответ 5
Используйте Qt: Пример Qt Systray
Это покажет значок systray на всех платформах, на которых работает Qt, и которые поддерживают такие значки. Однако вам нужно придумать стратегию, когда функциональность systray не поддерживается.