Em 2010, Stefano Palazzo, fez uma pergunta relacionada, Colocando um gtk.Widget arbitrário em um appindicator.Indicator e um similar foi solicitado no StackOverflow . Nos dois casos, o consenso é que os Indicadores de Aplicativos do Ubuntu são limitados. Como Michael Ekstrand colocou:
O suporte ao menu Indicador de Aplicação é baseado nos menus D-Bus, que são limitados no que suportam - eles suportam apenas a funcionalidade básica do menu, e não coisas mais exóticas, como widgets arbitrários.
No entanto, contradiz o que vemos no indicador Bluetooth hoje, em 2016: ele usa interruptores.
O mesmo pode ser observado com o indicador Ubuntu One da 13.04:
Então, obviamente, há um caminho. Estudei o código fonte do indicador-bluetooth, mas está escrito em Vala. No entanto, trabalho principalmente em python, e aprender Vala apenas para reescrever todos os meus indicadores já existentes é um trabalho demais.
Portanto, o cerne da questão: como alguém pode usar o Gtk.Widgets ou, no mínimo, uma chave de alternância, como no indicador Bluetooth, usando Python?
NOTA : Estou disposto a recompensar esta pergunta para recompensar uma resposta que fornecerá um exemplo de trabalho em python . Outros idiomas não são aceitos.
fonte
test = Gtk.CheckMenuItem("Monkey")
funciona adicionando um botão de verificação, mas deve haver mais. Enquanto que um funciona, este deve funcionar, mas não:Gtk.CheckMenuItemToggled("Monkey")
. Tenho certeza de que pode funcionar de qualquer maneira. Veja: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.htmlGtk.ImageMenuItem
é obsoleto e desencorajados de usar btw: developer.gnome.org/gtkmm/stable/deprecated.htmlRespostas:
Esse problema existe porque, embora o AppIndicators facilite a criação de um menu de indicadores, eles atrapalham a criação de um. Vejamos as diferenças entre exemplos de código python usando AppIndicator e um usando menus GLib da maneira que o código Bluetooth faz.
Primeiramente, você é instruído a criar um
gtk.Menu
, esses são objetos de menu Gtk de estilo antigo que usamGtk.Action
e agora estão obsoletos. O AppIndicator pega ogtk.Menu
objeto de você durante oset_menu(...)
processo e o analisa, pressionando cada um dos menus encontrados no serviço de indicador criado usandolibdbusmenu
. Esse processo de análise significa que qualquer coisa não suportada pelo AppIndicator é filtrada, não importa o que você faça.Em seguida, vejamos o menu Bluetooth. Isso é criado usando
Gio.Menu
objetos, esses são os novos menus Gnome de estilo, usando oGAction
sistema. Em seguida, registrou seu próprio serviço sem usarAppIndicator
oulibdbusmenu
e configurou usando umax-canonical-type
propriedade customizada para criar o widget de switch que é passadolibido
para análise.Todo esse exercício é muito ruim, pois são todas as personalizações da Unity da Canonical. Assim, assim que a unidade se desenvolve, não há indicadores de qualquer maneira.
fonte