Utiliser Gtk.Widgets dans les indicateurs d'application avec Python

44

En 2010, Stefano Palazzo a posé une question connexe, Mettre un fichier gtk.Widget arbitraire dans un indicateur.Indicator , et une requête similaire a été posée sur StackOverflow . Dans les deux cas, le consensus est que les indicateurs d'application d'Ubuntu sont limités. Comme Michael Ekstrand l'a dit:

  

La prise en charge du menu Application Indicator est basée sur les menus D-Bus, qui   sont limités dans ce qu'ils prennent en charge - ils ne supportent que les menus de base   fonctionnalité, pas plus de choses exotiques telles que des widgets arbitraires.

Cependant, cela contredit ce que nous voyons dans l’indicateur Bluetooth d’aujourd’hui, en 2016: il utilise des commutateurs à bascule.

La même chose pourrait être observée avec l’indicateur Ubuntu One de 13.04:

Alors, évidemment, il y a un moyen. J'ai étudié le code source indicateur-bluetooth, mais il est écrit en Vala. Cependant, je travaille principalement en Python, et apprendre Vala juste pour réécrire tous mes indicateurs existants est un peu trop compliqué.

Le cœur de la question: Comment peut-on utiliser Gtk.Widgets, ou tout au moins un interrupteur à bascule comme dans l’indicateur Bluetooth, en utilisant Python?

NOTE : Je suis prêt à mettre une prime sur cette question pour récompenser une réponse qui fournira un exemple de travail en python . Les autres langues ne sont pas acceptées.

    
posée Sergiy Kolodyazhnyy 01.10.2016 - 02:55
la source

1 réponse

1

Ce problème existe parce que, bien qu’AppIndicators facilite la création d’un menu d’indicateurs, il est impossible d’en créer un. Examinons les différences entre l'exemple de code python utilisant AppIndicator et celui utilisant les menus GLib comme le fait le code Bluetooth.

Tout d'abord, vous devez créer un gtk.Menu , ce sont des objets de menu Gtk d'ancien style qui utilisent Gtk.Action et qui sont maintenant obsolètes. AppIndicator prend l'objet gtk.Menu pendant le processus set_menu(...) et l'analyse, en poussant chacun des menus trouvés sur le service d'indicateur créé avec libdbusmenu . Ce processus d'analyse signifie que tout ce qui n'est pas pris en charge par AppIndicator est filtré, peu importe ce que vous faites.

Voyons maintenant le menu Bluetooth. C'est créé avec les objets Gio.Menu , ce sont de nouveaux menus Gnome de style utilisant le système GAction . Il a ensuite enregistré son propre service sans utiliser AppIndicator ou libdbusmenu et définir le paramètre en utilisant une propriété x-canonical-type personnalisée pour créer le widget de commutation qui est transmis à libido pour l'analyse.

Tout cet exercice est plutôt mauvais, car il s’agit de toutes les personnalisations Unity de Canonical. Donc, dès que l'unité disparaît, il n'y a de toute façon aucun indicateur.

    
réponse donnée Martin Owens -doctormo- 28.07.2017 - 20:36
la source

Lire d'autres questions sur les étiquettes