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

В настоящее время нет возможности для этого. Как предложил prokoudine, я открыл запрос функции. Его можно отследить здесь:

prokoudine

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

4 ответа

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

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

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

16
ответ дан 26 May 2018 в 00:25
  • 1
    Спасибо за этот очень четкий ответ. Это указывает на путь, который мне нужно будет выполнять, если я хочу, чтобы мое приложение работало в 11.04. У меня есть рабочий путь для GtkStatusIcon, но вам нужно будет развить все это для индикатора-апплета. Если я понял ваш комментарий к ошибке # 668375, я могу использовать свои локальные значки, не создавая целую тему значка, не так ли? – Takkat 15 November 2010 в 21:00
  • 2
    Имея время, чтобы погрузиться в программирование AppIndicator, я обнаружил, что использование предложения jgoguen для проверки модуля appindicator действительно не помогает, поскольку пользовательские значки не будут отображаться в 10.04 LTS. См. Мои комментарии к ошибке # 668375. – Takkat 29 December 2010 в 14:20
  • 3
    Мой ответ включает очень простой способ решить эту проблему. Он очень хорошо работает для моего приложения и даже сделал его безболезненным для переноса приложения, которое использует AppIndicators для Windows! – Nathan Osman 11 May 2011 в 05:07

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

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

Загрузка следующего файла и вызов его appindicator_replacement.py Добавление следующего в ваше приложение:
try:
    import appindicator
except ImportError:
    import appindicator_replacement as appindicator

Вот и все! Теперь ваше приложение будет работать отлично или без поддержки AppIndicators.

Вот и все! этот файл выпущен под управлением Windows, если вы не используете какой-либо другой код для конкретной платформы. Лицензия MIT - так что вы можете использовать ее для чего угодно.

10
ответ дан 26 May 2018 в 00:25

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

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

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

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

9
ответ дан 26 May 2018 в 00:25
  • 1
    Тем не менее, могут быть среды, в которых установлен python-appindicator , но индикатор аплета не работает. Приложению также потребуется обработать это приложение. – Takkat 14 November 2010 в 18:27
  • 2
    В этом случае см. wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators & gt; Пользовательские откаты. По умолчанию вы получите gtk.StatusIcon для индикатора приложения, если нет аппликатора индикатора. – htorque 14 November 2010 в 19:14
  • 3
    Я знаю о резервном варианте. Что я не понимаю, если индикатор-апплет не работает, как индикатор-апплет может обеспечить резерв? – Takkat 14 November 2010 в 19:51
  • 4
    Я предполагаю, что он просто проверяет индикатор-апплет и обеспечивает функциональность gtk_status_icon за кулисами. – jgoguen 15 November 2010 в 02:42
  • 5
    @jgoguen: что это такое? Я понимаю, что с 11.04 Ubuntu / Unity будет не поддерживать gtk_status_icon. Другие распределения могут не иметь «это». Я действительно беспокоюсь об этом. – Takkat 15 November 2010 в 11:56
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, потому что это не так. Нет никакого резервного сценария, потому что индикатор-апплет является обязательным компонентом, работающим по умолчанию.

3
ответ дан 26 May 2018 в 00:25
  • 1
    Благодарим вас за то, что вы указали на получение PID индикатора-апплета (я делаю это уже для других возможных зависимостей с помощью pidof), это было бы, по общему признанию, менее изящным способом, если бы не было лучшего. Насколько я вижу, аппликатор-индикатор надежно работает с единицей, только если требования к оборудованию выполнены. Пользователи смогут загрузиться в 2D GNOME и могут решить не запускать индикатор-апплет. Однако это может быть не по моей проблеме. – Takkat 15 November 2010 в 14:15
  • 2
    Я согласен с вами в том, что он может быть не «изящным» (но вы можете добавить всю косметику, которую хотите: D), однако она должна работать. Лично я предпочитаю решения, которые хорошо работают, и элегантность приходит второй :) – OpenNingia 15 November 2010 в 15:09
  • 3
    Эта задача, похоже, не работает в моей системе 14.04. Вышел ли этот подход? Вместо этого есть много /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service задач. – halfer 22 November 2015 в 04:43

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

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