Как запрограммировать значок состояния, который будет отображаться в Ubuntu, а также в других дистрибутивах?

Рассматриваемое приложение выполняет некоторые действия (в данном случае подключение аудио к сетевым потокам) и минимизируется, если эти действия были успешными. Следовательно, значок состояния необходим для отображения состояния соединения (например, СОЕДИНЕНО / ОТКЛЮЧЕНО). Только при нажатии на значок откроется окно приложения, чтобы получить доступ к другим параметрам.

Используя Python 2.6 и pyGtk, я легко понял это, используя gtk_status_icon . Я специально написал приложение для запуска на как можно большем количестве дистрибутивов, включая различные версии Ubuntu. Я позаботился об использовании возможных зависимостей только после того, как пользователь установил их.

Однако теперь я слышу, что gtk_status_icon больше не будет поддерживаться в будущих выпусках Ubuntu. Разработчикам предлагается использовать индикаторы приложений. В таком случае лучше всего убедиться, что:

  1. Локальные значки приложения отображаются правильно
  2. Приложение будет по-прежнему работать и отображать свои значки в будущих выпусках Ubuntu.
  3. Приложение будет также работать и отображать свои значки в других средах, где индикатор-апплет , libappindicator и python-appindicator не предоставляются.

Механизмы восстановления индикатора приложения для gtk_status_icon не будут работать, если не запущен индикатор-апплет . Интерпретаторы Python не будут работать, если не было модуля appindicator для импорта из. Нужно ли разрабатывать разные версии для разных дистрибутивов или есть лучший способ обойти это?

Где найти документацию о том, как использовать ApplicationIndicator, кроме как в примере, приведенном в Ubuntu Wiki ? Какие команды предоставляются для проверки работы апплета индикатора, чтобы избежать программирования различных исходных кодов для дистрибутивов Ubuntu и не-Ubuntu?

23
задан 28 April 2012 в 05:32

4 ответа

Я думаю, что здесь нужно больше определять библиотеку python-appindicator. Если он присутствует, он будет поддерживать все запасные варианты, которые вам нужны. Он будет обрабатывать XFCE, KDE и более старый GNOME соответственно. Хороший пример того, как это сделать в этом ответе .

Библиотека appindicator будет использовать DBus для проверки доступности процесса визуализации индикатора приложения. Это будет иметь место в Unity, или если апплет индикатора работает. Если он доступен, он будет использовать его, а если нет, то обратится к использованию GtkStatusIcon с тем же меню.

К сожалению, я считаю, что вам придется сохранить оба пути кода, если вы хотите обработать случай, когда библиотека недоступна. Тем не менее, мы будем рады помочь получить библиотеку в других дистрибутивах:)

0
ответ дан 28 April 2012 в 05:32
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, потому что это не так. Резервного сценария не существует, поскольку индикатор-апплет является обязательным компонентом, работающим по умолчанию.

0
ответ дан 28 April 2012 в 05:32

Вам нужно будет написать код для обоих. Вы можете обнаружить присутствие appindicator в вашем коде Python, используя нечто похожее на:

have_appindicator = True
try:
    import appindicator
except:
    have_appindicator = False

Оттуда используйте have_appindicator, чтобы решить, следует ли использовать код appindicator или код gtk_status_icon.

К сожалению, это также означает, что для тестирования вам понадобится и Ubuntu, и другая среда.

0
ответ дан 28 April 2012 в 05:32

У меня есть отличное решение, которое хорошо сработало в StackApplet - я создал функционально-эквивалентную версию модуля appindicator, которая внутренне использует gtk.StatusIcon для обеспечения идентичной функциональности, когда реальный модуль не работает. существуют.

Использовать его так же просто, как:

  1. Скачивать следующий файл и называть его appindicator_replacement.py
  2. Добавление следующего в ваше приложение :

    try:
        import appindicator
    except ImportError:
        import appindicator_replacement as appindicator
    

Вот и все! Теперь ваше приложение будет отлично работать с поддержкой или без поддержки AppIndicators. Он даже будет работать в Windows, если у вас нет другого специфичного для платформы кода.


Примечание: файл выпущен под лицензией MIT - так что вы можете использовать его практически для чего угодно.

0
ответ дан 28 April 2012 в 05:32

Другие вопросы по тегам:

Похожие вопросы: