En 2010, Stefano Palazzo, hizo una pregunta relacionada: poner un widget arbitrario gtk en un appindicator.Indicator , y uno similar en StackOverflow . En ambos casos, el consenso es que los indicadores de aplicaciones de Ubuntu son limitados. Como dijo Michael Ekstrand:
El soporte del menú Indicador de aplicación se basa en los menús de D-Bus, que son limitados en lo que admiten: solo admiten la funcionalidad básica del menú, no cosas más exóticas como widgets arbitrarios.
Sin embargo, contradice lo que vemos en el indicador Bluetooth de hoy, en 2016: utiliza interruptores de palanca.
Lo mismo podría observarse con el indicador Ubuntu One de 13.04:
Entonces obviamente hay un camino. He estudiado el código fuente del indicador bluetooth, pero está escrito en Vala. Sin embargo, trabajo principalmente en Python, y aprender a Vala a reescribir todos mis indicadores ya existentes es demasiado trabajo.
Entonces, el núcleo de la pregunta: ¿cómo se puede usar Gtk.Widgets, o como mínimo un interruptor de palanca al igual que en el indicador Bluetooth, usando Python?
NOTA : Estoy dispuesto a recompensar esta pregunta para recompensar una respuesta que proporcionará un ejemplo de trabajo en python . No se aceptan otros idiomas.
fuente
test = Gtk.CheckMenuItem("Monkey")
funciona agregando un botón de verificación, pero debería haber más. Mientras que se trabaje, éste debería funcionar, pero sin que:Gtk.CheckMenuItemToggled("Monkey")
. Estoy bastante seguro de que puede funcionar de todos modos. Ver: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.htmlGtk.ImageMenuItem
está desaprobado y desaconsejado usar btw: developer.gnome.org/gtkmm/stable/deprecated.htmlRespuestas:
Este problema existe porque, si bien los AppIndicators facilitan la creación de un menú de indicadores, se interponen en la elaboración de uno. Veamos las diferencias entre el código de python de ejemplo que usa AppIndicator y uno que usa los menús GLib de la misma manera que lo hace el código de Bluetooth.
En primer lugar, se le indica que haga un
gtk.Menu
, estos son objetos de menú Gtk de estilo antiguo que usan yGtk.Action
que ahora están en desuso. AppIndicator le quita elgtk.Menu
objeto durante elset_menu(...)
proceso y lo analiza, colocando cada uno de los menús que encuentra en el servicio de indicador creado usandolibdbusmenu
. Este proceso de análisis significa que todo lo que no sea compatible con AppIndicator se filtra, sin importar lo que haga.A continuación, veamos el menú de Bluetooth. Eso se crea usando
Gio.Menu
objetos, estos son nuevos menús de estilo Gnome que usan elGAction
sistema. Luego registró su propio servicio sin usarAppIndicator
olibdbusmenu
y lo configuró usando unax-canonical-type
propiedad personalizada para crear el widget de conmutador que se pasa allibido
análisis.Todo este ejercicio es bastante malo, ya que son todas las personalizaciones de Unity de Canonical. Entonces, tan pronto como la unidad se va, no hay appindicadores de todos modos.
fuente