如何获取图标主题中的名称以便与 pythons appindicator 模块一起使用?

如何获取图标主题中的名称以便与 pythons appindicator 模块一起使用?

我如何获取可以插入而不是“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()

我的回答如下基本上就是这样。不过,如果有一些 Python 代码可以显示所有可用的图标就更好了。

答案1

简单的:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

icon_theme = Gtk.IconTheme()
print(icon_theme.list_icons())

其输出是所有图标名称的元组:

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

也可以看看:Gtk.IconTheme.list_icons在 Gtk-3.0 文档中

如果你想让你的图标成为GdkPixbuf.Pixbuf,您可以使用load_icon方法:

>>> icon_theme.load_icon("gtk-execute", 48, 0)
<GdkPixbuf.Pixbuf object at 0x7fd1689a5d80 (GdkPixbuf at 0x2ad45e0)>

如果你想要文件名相反,你可以使用lookup_icon方法:

>>> icon_theme.lookup_icon("gtk-execute", 48, 0).get_filename()
/usr/share/icons/gnome/48x48/actions/gtk-execute.png

48所需图标的大小是多少(另请参阅:get_icon_sizes)。

答案2

它遵循常规图标命名,据我所知,它将从您的主题开始,然后不断回退,直到与名称匹配。

以我目前使用的法恩莎图标主题为例。

里面/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=...线了吗?这些是 Faenza 的“后备方案”,以防它本身没有图标。

这与您的问题相关,因为您可以输入图标的名称,然后首先在 中搜索该图标/usr/share/icons/YOURICONTHEME/。在找不到图标的奇怪情况下,它会检查后备(在本例中为/usr/share/icons/gnome//usr/share/icons/hicolor/)。您会发现大多数(Ubuntu)图标主题都继承自gnome和/或hicolor因此,如果您在这些文件夹中使用图标的名称,您很可能可以放心,每个主题都会显示一个图标。

答案3

无耻的自答http://gtk2-perl.sourceforge.net/doc/pod/Gtk2/Stock.html

编辑:不,不是真的。错误且不完整的答案。例如,“indicator-messages”不包含在该列表中。

更新/usr/share/icons/MYTHEME:在标明正在MYTHEME使用的主题名称的文件夹中,应该有图标。现在就测试一下。

更新2:是的,上述文件夹中的所有图标都可以使用!而且主题有未找到项目的后备。前面链接中提到的 gtk-stock 中的图标来自后备。如果有一些 python 代码可以显示所有可用的图标就好了。一个仅使用 gtk-stock 的标准项目和默认主题就很好,因为其他图标的存在取决于用户在运行时使用的主题。

答案4

还有一个显示所有图标的 GUI 应用程序,如下所示这个答案

gtk3-icon-browser

相关内容