45 votes

Utilisation de Gtk.Widgets dans les indicateurs d'applications avec Python

En 2010, Stefano Palazzo a posé une question similaire, Mettre un gtk.Widget arbitraire dans un appindicator.Indicator et une question 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 l'a dit Michael Ekstrand :

T sont limités dans ce qu'ils prennent en charge - ils ne prennent en charge que la et non des choses plus exotiques telles que des widgets arbitraires.

Cependant, il est en contradiction avec ce que nous voyons dans l'indicateur Bluetooth aujourd'hui, en 2016 : il utilise des interrupteurs à bascule.

enter image description here

La même chose a pu être observée avec l'indicateur Ubuntu One à partir de la version 13.04 :

enter image description here

Il est donc évident qu'il existe un moyen. J'ai étudié le code source de l'indicateur-bluetooth, mais il est écrit en Vala. Cependant, je travaille principalement en Python, et apprendre Vala juste pour réécrire tous mes indicateurs déjà existants est un peu trop de travail.

Le cœur de la question est donc : Comment utiliser Gtk.Widgets, ou au minimum 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 fonctionnel. en Python . Les autres langues ne sont pas acceptées.

2voto

Nelson Reis Points 149

Ce problème existe parce que si les AppIndicators facilitent la création d'un menu d'indicateurs, ils en entravent la réalisation. Examinons les différences entre un exemple de code Python utilisant AppIndicator et un autre utilisant GLib Menus comme le fait le code Bluetooth.

Tout d'abord, il vous est demandé de faire un gtk.Menu Il s'agit d'objets de menu Gtk à l'ancienne qui utilisent la fonction Gtk.Action qui sont désormais obsolètes. AppIndicator prend l'élément gtk.Menu objet de votre part lors de la set_menu(...) et l'analyse, poussant chacun des menus qu'il trouve dans le service d'indicateurs créé à l'aide de la commande libdbusmenu . Ce processus d'analyse signifie que tout ce qui n'est pas pris en charge par AppIndicator est filtré, quoi que vous fassiez.

Voyons maintenant le menu Bluetooth. Ce menu est créé à l'aide de Gio.Menu il s'agit de menus Gnome d'un nouveau style, utilisant la fonction GAction système. Il a ensuite enregistré son propre service sans utiliser la fonction AppIndicator o libdbusmenu et le configure à l'aide d'un fichier personnalisé x-canonical-type pour créer le widget de commutation qui est transmis à la propriété libido pour l'analyse.

Tout cet exercice est assez mauvais, puisqu'il s'agit de personnalisations d'Unity par Canonical. Donc dès que Unity disparaît, il n'y a plus d'indicateurs d'application de toute façon.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X