В настоящее время нет возможности для этого. Как предложил prokoudine, я открыл запрос функции. Его можно отследить здесь:
Я думаю, что необходимость здесь в самом деле более определена в библиотеке python-appindicator. Если он присутствует, он будет поддерживать все резервные случаи, которые вам нужны. Он будет обрабатывать XFCE, KDE и более старый GNOME соответствующим образом. Хороший пример того, как это сделать в этом ответе.
Библиотека appindicator будет использовать DBus, чтобы проверить, доступен ли процесс рендеринга индикатора приложения. Это будет иметь место в Unity, или если индикатор-апплет запущен. Если он доступен, он будет использовать это, если нет, то он откажется от использования GtkStatusIcon с тем же меню.
К сожалению, я считаю, что вам нужно будет сохранить оба пути кода, если вы хотите обрабатывать случай отсутствия библиотеки. Хотя, мы будем рады помочь получить библиотеку в других дистрибутивах:)
У меня отличное решение, хорошо работающее в StackApplet - я создал функционально эквивалентную версию модуля appindicator, которая внутренне использует gtk.StatusIcon для обеспечения идентичной функциональности, когда реального модуля не существует.
Использовать его так же просто, как:
Загрузка следующего файла и вызов его appindicator_replacement.py Добавление следующего в ваше приложение:try:
import appindicator
except ImportError:
import appindicator_replacement as appindicator
Вот и все! Теперь ваше приложение будет работать отлично или без поддержки AppIndicators.
Вот и все! этот файл выпущен под управлением Windows, если вы не используете какой-либо другой код для конкретной платформы. Лицензия MIT - так что вы можете использовать ее для чего угодно.
Вам нужно будет написать код для обоих. Вы можете обнаружить присутствие appindicator в вашем коде Python, используя что-то похожее на:
have_appindicator = True
try:
import appindicator
except:
have_appindicator = False
. Оттуда используйте has_appindicator, чтобы решить, следует ли использовать код appindicator или код gtk_status_icon.
К сожалению, это также означает, что вам нужно будет иметь как Ubuntu, так и другую среду для тестирования.
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, потому что это не так. Нет никакого резервного сценария, потому что индикатор-апплет является обязательным компонентом, работающим по умолчанию.