Рассматриваемое приложение выполняет некоторые действия (в данном случае подключение аудио к сетевым потокам) и минимизируется, если эти действия были успешными. Следовательно, значок состояния необходим для отображения состояния соединения (например, СОЕДИНЕНО / ОТКЛЮЧЕНО). Только при нажатии на значок откроется окно приложения, чтобы получить доступ к другим параметрам.
Используя Python 2.6 и pyGtk, я легко понял это, используя gtk_status_icon . Я специально написал приложение для запуска на как можно большем количестве дистрибутивов, включая различные версии Ubuntu. Я позаботился об использовании возможных зависимостей только после того, как пользователь установил их.
Однако теперь я слышу, что gtk_status_icon больше не будет поддерживаться в будущих выпусках Ubuntu. Разработчикам предлагается использовать индикаторы приложений. В таком случае лучше всего убедиться, что:
Механизмы восстановления индикатора приложения для gtk_status_icon не будут работать, если не запущен индикатор-апплет . Интерпретаторы Python не будут работать, если не было модуля appindicator для импорта из. Нужно ли разрабатывать разные версии для разных дистрибутивов или есть лучший способ обойти это?
Где найти документацию о том, как использовать ApplicationIndicator, кроме как в примере, приведенном в Ubuntu Wiki ? Какие команды предоставляются для проверки работы апплета индикатора, чтобы избежать программирования различных исходных кодов для дистрибутивов Ubuntu и не-Ubuntu?
Я думаю, что здесь нужно больше определять библиотеку python-appindicator. Если он присутствует, он будет поддерживать все запасные варианты, которые вам нужны. Он будет обрабатывать XFCE, KDE и более старый GNOME соответственно. Хороший пример того, как это сделать в этом ответе .
Библиотека appindicator будет использовать DBus для проверки доступности процесса визуализации индикатора приложения. Это будет иметь место в Unity, или если апплет индикатора работает. Если он доступен, он будет использовать его, а если нет, то обратится к использованию GtkStatusIcon с тем же меню.
К сожалению, я считаю, что вам придется сохранить оба пути кода, если вы хотите обработать случай, когда библиотека недоступна. Тем не менее, мы будем рады помочь получить библиотеку в других дистрибутивах:)
for line in os.popen("ps xa"):
fields = line.split()
pid = fields[0]
process = fields[4]
applet_is_running = ( process.find('indicator-applet') > 0 )
Таким образом, вы можете определить, работает ли апплет индикатора. Вам не нужно беспокоиться об Ubuntu 11.04, потому что это не так. Резервного сценария не существует, поскольку индикатор-апплет является обязательным компонентом, работающим по умолчанию.
Вам нужно будет написать код для обоих. Вы можете обнаружить присутствие appindicator в вашем коде Python, используя нечто похожее на:
have_appindicator = True
try:
import appindicator
except:
have_appindicator = False
Оттуда используйте have_appindicator, чтобы решить, следует ли использовать код appindicator или код gtk_status_icon.
К сожалению, это также означает, что для тестирования вам понадобится и Ubuntu, и другая среда.
У меня есть отличное решение, которое хорошо сработало в StackApplet - я создал функционально-эквивалентную версию модуля appindicator
, которая внутренне использует gtk.StatusIcon
для обеспечения идентичной функциональности, когда реальный модуль не работает. существуют.
Использовать его так же просто, как:
appindicator_replacement.py
Добавление следующего в ваше приложение :
try:
import appindicator
except ImportError:
import appindicator_replacement as appindicator
Вот и все! Теперь ваше приложение будет отлично работать с поддержкой или без поддержки AppIndicators. Он даже будет работать в Windows, если у вас нет другого специфичного для платформы кода.
Примечание: файл выпущен под лицензией MIT - так что вы можете использовать его практически для чего угодно.