Como obtenho os nomes no meu tema de ícones para uso com o módulo appindicator pythons?

4

Como obtenho as strings que posso inserir em vez de 'gtk-execute'?

#!/usr/bin/python

import gobject
import gtk
import appindicator

if __name__ == "__main__":
    ind = appindicator.Indicator("example-simple-client", "gtk-execute",
        appindicator.CATEGORY_APPLICATION_STATUS)
    ind.set_status (appindicator.STATUS_ACTIVE)

    menu = gtk.Menu()

    for i in range(3):
        buf = "Test-undermenu - %d" % i
        menu_items = gtk.MenuItem(buf)
        menu.append(menu_items)
        menu_items.connect("activate", gtk.main_quit)
        menu_items.show()

    ind.set_menu(menu)
    gtk.main()

Meu responder abaixo praticamente faz isso. Ainda assim, seria bom ter algum código python que exclua todos os ícones disponíveis.

    
por con-f-use 03.06.2011 / 18:35

3 respostas

13

Simples:

import gtk

icon_theme = gtk.icon_theme_get_default()
print icon_theme.list_icons()

A saída do qual é uma tupla de todos os nomes de ícones:

('input-gaming', 'gnome-aorta', 'stock_bottom', 'config-language', ...) 

Veja também: gtk.IconTheme.list_icons na documentação do pygtk

Se quiser obter seu ícone como GtkPixbuf , use o load_icon método:

>>> icon_theme.load_icon("gtk-execute", 48, 0)
<gtk.gdk.Pixbuf object at 0xb737443c (GdkPixbuf at 0x907bf38)>

Se você quiser um nome do arquivo , use o lookup_icon :

>>> icon_theme.lookup_icon("gtk-execute", 48, 0).get_filename()
/usr/share/icons/Humanity/actions/48/gtk-execute.svg

Em que 48 é o tamanho do ícone desejado (consulte também: get_icon_sizes ).

    
por Stefano Palazzo 06.06.2011 / 05:57
1

Ele segue a nomeação regular de ícones, o que, até onde eu sei, começa no seu tema e depois continua caindo até que combine com algo com o nome.

Por exemplo, o tema do ícone Faenza que eu uso atualmente.

Em /usr/share/icons/Faenza/index.theme , diz (recortado)

[Icon Theme]
Name=Faenza
Inherits=gnome,hicolor
Comment=Icon theme project with tilish style, by Tiheum
Directories=actions/16,animations/16,apps/16,categories/16,devices/16,emblems/16,mimetypes/16,places/16,status/16,stock/16,actions/22,animations/22,apps/22,categories/22,devices/22,emblems/22,mimetypes/22,places/22,status/22,stock/22,actions/24,animations/24,apps/24,categories/24,devices/24,emblems/24,mimetypes/24,places/24,status/24,stock/24,actions/32,animations/32,apps/32,categories/32,devices/32,emblems/32,mimetypes/32,places/32,status/32,stock/32,actions/48,animations/48,apps/48,categories/48,devices/48,emblems/48,mimetypes/48,places/48,status/48,stock/48,actions/scalable,apps/scalable,categories/scalable,devices/scalable,emblems/scalable,mimetypes/scalable,places/scalable,status/scalable,stock/scalable

Observe a linha Inherits=... ? Esses são os "fallbacks" de Faenza, caso eles não tenham o próprio ícone.

Isso é relevante para sua pergunta, porque você pode inserir um nome para um ícone e, em seguida, procurar primeiro o ícone em /usr/share/icons/YOURICONTHEME/ . No caso estranho de não encontrá-lo, ele verificará os fallbacks (nesse caso, /usr/share/icons/gnome/ e /usr/share/icons/hicolor/ ). Você descobrirá que a maioria dos temas de ícones (do Ubuntu) herda de gnome e / ou hicolor , portanto, se você usar o nome de um ícone nessas pastas, pode ter certeza de que todos os temas exibirão um ícone. / p>     

por Ward Muylaert 05.06.2011 / 20:55
1

Selfanswer desavergonhado : link

Editar : Não, não realmente. Errado resposta incompleta. Por exemplo, "indicador de mensagens" não está incluído nessa lista.

Atualizar : Na pasta /usr/share/icons/MYTHEME onde MYTHEME denota o nome do tema em uso devem ser os ícones. Testará isso agora.

Update2 : Sim, todos os ícones da pasta mencionada funcionam! E os temas têm fallbacks para itens não encontrados. Os que estão em estoque gtk mencionados no link anterior são dos substitutos. Seria bom ter algum código python que coloca todos os ícones disponíveis. Uma tarifa boa usando itens-padrão do estoque-gtk e o tema padrão apenas, já que a presença dos outros depende do tema que o usuário emprega no tempo de execução.

    
por con-f-use 03.06.2011 / 18:42