GTK在哪里找到与gtk_image_new_from_icon_name()一起使用的图标名称?

时间:2011-09-24 14:27:57

标签: gtk

GTK可以通过“当前图标主题中的图标”的名称构建图像。例如:

#!/usr/bin/env python
import gtk; wnd=gtk.Window(); img=gtk.Image();
img.set_from_icon_name( "go-jump", gtk.ICON_SIZE_BUTTON );
wnd.add( img ); img.show(); wnd.show(); gtk.main()

这将显示一个内部带有漂亮箭头的窗口。但是 - 只在ubuntu上。在Windows或OSX上,它将显示窗口中带有“无图像”图标:(。所以我的问题是 - GTK保持图标名称如“跳转”?是否有一些列表或规格可用,如股票图标?也许它是我可以使用一些GTK API列出这些图标吗?

3 个答案:

答案 0 :(得分:18)

名称位于Icon Naming Specification。如果这在Windows或OSX上不起作用,则将其报告为错误 - GTK需要至少安装一个图标主题才能正常工作。

答案 1 :(得分:6)

迟到总比没有好!

这是两个小的Python脚本,显示按名称排序的所有现有图标:

答案 2 :(得分:1)

在Debian上开发但需要跨平台支持,我最近分别通过MSYS2和Homebrew在Windows和OS X上安装了gtkmm和co。顺便说一句,gtkmm,MSYS2和Homebrew都是很棒的项目,非常值得一看(我没有联盟等等)。

在那个时候,我想我已经对这种情况发生的原因以及如何解决这个问题有了一个很好的理解。它

为什么

这是 GTK +中的错误,正如接受的答案所暗示的那样。在另一个平台上使用为Linux定制的库,通过创建Linux- 之类图片的环境,这是生活中的事实。

在Linux上,您拥有一个带有标准化文件系统的环境 - 通过FHS和FreeDesktop规范 - 图标始终位于/usr/share/icons

相比之下,在其他平台上,您可以安装Linux- 之类的环境进行编译,有时还安装运行时,每个环境都有自己的虚拟文件系统 - 很难被其他程序跟踪,而不会做任何危险的事情。最终用户的PATH,特别是如果你正在尝试多个这样的环境......你明白了。最终结果是,默认情况下,您的程序无需了解您的环境的虚拟根位于何处。

如何

我发现,解决方案是将所有必需的资源复制到与可执行文件相同的文件夹中 - 即您最终重新分发的目录,或者如果您正在编写OSS,请执行此操作在您的makefile或类似内容中。这是因为,据我所知,一个程序 - 寻找GTK +资源,DLL等 - 在(可能没有用)PATH之前检查它自己的目录。与贝壳做事有点相反,但方便!

因此,您将包管理器安装的相关图标主题复制到所述目录中的新文件夹中。至少,为标准主题执行此操作:将其复制到$YOURDIR/share/icons/Adwaita。然后重新启动程序。如果你像我一样,现在所有的图标都能很好地运作。

这同样适用于您需要使用应用程序重新分发的任何其他资源。

值得注意的是,我建议对二进制文件所需的所有DLL做同样的事情。这些可能会或可能不会对您开箱即用,具体取决于您调用二进制文件的方式 - 但您实际上无法推测您的最终用户是否已在某处安装了正确的DLL集在他们的PATH中,由正确的编译器编译的正确版本。