Как выполнить приложение в системном трее на других платформах?

В 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 не поддерживается.