![如何获取图标主题中的名称以便与 pythons appindicator 模块一起使用?](https://linux22.com/image/1092913/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%9B%BE%E6%A0%87%E4%B8%BB%E9%A2%98%E4%B8%AD%E7%9A%84%E5%90%8D%E7%A7%B0%E4%BB%A5%E4%BE%BF%E4%B8%8E%20pythons%20appindicator%20%E6%A8%A1%E5%9D%97%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我如何获取可以插入而不是“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 应用程序,如下所示这个答案: