Использование Gtk. Виджеты в индикаторах приложения с Python

В 2010 Stefano Palazzo, которого задают связанный вопрос, Помещая произвольный gtk. Виджет в appindicator. Индикатор и подобный спросили относительно StackOverflow. В обоих случаях согласие состоит в том, что Индикаторы приложения Ubuntu ограничены. Как Michael Ekstrand выразился:

Поддержка меню Application Indicator основана на меню D-Bus, которые ограничены в том, что они поддерживают - они только поддерживают функциональность основного меню, не более экзотические вещи, такие как произвольные виджеты.

Однако это противоречит тому, что мы видим в индикаторе Bluetooth сегодня в 2016: это использует переключатели.

enter image description here

То же могло наблюдаться с Ubuntu Один индикатор от 13,04:

enter image description here

Так, очевидно, существует путь. Я изучил исходный код Bluetooth индикатора, но он записан в Vala. Я, однако, работаю, прежде всего, в Python и изучении, что Vala только для перезаписи всех моих уже существующих индикаторов является немного слишком много работы.

Так ядро вопроса: Как можно использовать Gtk. Виджеты, или в очень минимальном переключатель точно так же, как в индикаторе Bluetooth, с помощью Python?

Примечание: Я готов поместить щедрость на этот вопрос вознаградить ответ, который обеспечит рабочий пример в Python. Другие языки не приняты.

44
задан 23 May 2017 в 05:39

1 ответ

Эта проблема существует, потому что, в то время как AppIndicators помогают создать меню индикатора, они действительно мешают созданию того. Давайте посмотрим на различия между использованием кода Python в качестве примера AppIndicator и использующими Бойкими Меню путем, код Bluetooth делает.

Во-первых Вы проинструктированы для создания a gtk.Menu, это старые объекты меню Gtk стиля то использование Gtk.Action это теперь удерживается от использования. AppIndicator берет gtk.Menu объект от Вас во время set_menu(...) процесс и синтаксические анализы это, продвигая каждое из меню это находит на сервис индикатора созданный с помощью libdbusmenu. Этот процесс парсинга означает, что что-либо не поддерживаемое AppIndicator отфильтровано, независимо от того, что Вы делаете.

Затем давайте посмотрим на меню Bluetooth. Это создало использование Gio.Menu объекты, это модернизированные меню Gnome с помощью GAction система. Это затем зарегистрировало свой собственный сервис без использования AppIndicator или libdbusmenu и набор это использует пользовательское x-canonical-type свойство для создания виджета переключателя, который передается libido для парсинга.

Это целое осуществление довольно плохо, так как это - собственное удовлетворение требованиям заказчика Единицы всего Canonical. Таким образом, как только единица идет, так или иначе нет никакого appindicators.

1
ответ дан 23 November 2019 в 00:00

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

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