En 2010, Stefano Palazzo a posé une question connexe, intitulée Mettre un gtk.Widget arbitraire dans un indicateur.indicateur , et une question similaire sur StackOverflow . Dans les deux cas, le consensus est que les indicateurs d'application d'Ubuntu sont limités. Comme le dit Michael Ekstrand:
La prise en charge du menu Indicateur d'application est basée sur les menus D-Bus, limités dans ce qu'ils supportent: ils ne prennent en charge que la fonctionnalité de menu de base, pas des éléments plus exotiques tels que des widgets arbitraires.
Cependant, il contredit ce que nous voyons dans l'indicateur Bluetooth aujourd'hui, en 2016: il utilise des commutateurs à bascule.
La même chose pourrait être observée avec Ubuntu Un indicateur à partir de 13.04:
Alors évidemment, il y a un moyen. J'ai étudié le code source Bluetooth-Indicator, mais il est écrit en vala. Cependant, je travaille principalement en python, et apprendre Vala à réécrire tous mes indicateurs existants est un peu trop de travail.
Donc, l’essentiel de la question: comment utiliser Gtk.Widgets, ou au minimum un interrupteur à bascule, comme dans l’indicateur Bluetooth, avec Python?
NOTE : Je suis prêt à mettre 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.
la source
test = Gtk.CheckMenuItem("Monkey")
, l’ajout d’une case à cocher est utile, mais il devrait y en avoir plus. Bien que que l' on travaille, celui - ci devrait fonctionner, mais ne fonctionne pas:Gtk.CheckMenuItemToggled("Monkey")
. Je suis à peu près sûr que cela peut fonctionner de toute façon. Voir: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.htmlGtk.ImageMenuItem
est déconseillé et déconseillé d'utiliser btw: developer.gnome.org/gtkmm/stable/deprecated.htmlRéponses:
Ce problème existe car, bien qu'AppIndicators facilite la création d'un menu d'indicateurs, ils empêchent d'en créer un. Examinons les différences entre un exemple de code python utilisant AppIndicator et un code utilisant les menus GLib, comme le fait le code Bluetooth.
Tout d'abord, vous êtes invité à créer un
gtk.Menu
, ce sont des objets de menu de style Gtk utilisésGtk.Action
qui sont maintenant obsolètes. AppIndicator prend l'gtk.Menu
objet de votre part pendant leset_menu(...)
processus et l'analyse, en poussant chacun des menus trouvés sur le service d'indicateur créé à l'aide delibdbusmenu
. Ce processus d'analyse signifie que tout ce qui n'est pas pris en charge par AppIndicator est filtré, quoi que vous fassiez.Ensuite, regardons le menu Bluetooth. Créé à l'aide d'
Gio.Menu
objets, il s'agit de nouveaux styles de menus Gnome utilisant leGAction
système. Il a ensuite enregistré son propre service sans utiliserAppIndicator
nilibdbusmenu
and set, en utilisant unex-canonical-type
propriété personnalisée pour créer le widget de commutateur, qui est transmis à l'libido
analyse.Tout cet exercice est très mauvais, car ce sont toutes les personnalisations Unity de Canonical. Donc, dès que l’unité disparaît, il n’ya pas d’indicateur.
la source