web-dev-qa-db-ja.com

python appindicatorモジュールで使用するアイコンテーマの名前を取得するにはどうすればよいですか?

「gtk-execute」の代わりに挿入できる文字列を取得するにはどうすればよいですか?

#!/usr/bin/python

import gobject
import gtk
import appindicator

if __== "__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()

私の 以下の回答 ほぼそれを行います。 それでも、いくつかのpython使用可能なすべてのアイコンを出力するコードです。

4
con-f-use

シンプル:

import gtk

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

出力は、すべてのアイコン名のタプルです:

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

参照: gtk.IconTheme.list_icons pygtk docs

アイコンをGtkPixbufとして取得したい場合は、 load_icon メソッド:

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

代わりにfilenameが必要な場合は、 lookup_icon メソッド:

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

どこ 48は、目的のアイコンのサイズです(参照: get_icon_sizes )。

13
Stefano Palazzo

通常のアイコンの命名規則に従います。これは、私の知る限り、テーマから始まり、名前と一致するまで後退し続けます。

たとえば、現在使用しているFaenzaアイコンテーマを取り上げます。

/usr/share/icons/Faenza/index.themeには(クリッピング)と表示されます

[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

Inherits=...行に注目してください。これらは、アイコン自体を持たない場合のファエンツァの「フォールバック」です。

アイコンの名前を入力すると、アイコンが最初に/usr/share/icons/YOURICONTHEME/で検索されるため、これは質問に関連しています。見つからないという奇妙な場合、フォールバックをチェックします(この場合は/usr/share/icons/gnome//usr/share/icons/hicolor/)。ほとんどの(Ubuntu)アイコンテーマはgnomeおよび/またはhicolorから継承するため、これらのフォルダーでアイコンの名前を使用すると、すべてのテーマが安心できる可能性が高いでしょう。アイコンが表示されます。

1
Ward Muylaert

恥知らずな自己回答http://gtk2-Perl.sourceforge.net/doc/pod/Gtk2/Stock.html

Edit:いいえ、そうではありません。 違う 不完全な答え。たとえば、「indicator-messages」はそのリストに含まれていません。

更新:フォルダー内_/usr/share/icons/MYTHEMEここで、MYTHEMEは、使用するテーマの名前がアイコンであることを示します。今すぐテストします。

Update2:はい、前述のフォルダ内のすべてのアイコンが機能します!また、テーマには見つからないアイテムのフォールバックがあります。前のリンクで言及されたgtk-stockのものはフォールバックのものです。いくつかのpython使用可能なすべてのアイコンを配置するコードがあります。他の人の存在はユーザーが実行時に使用するテーマ。

1
con-f-use