我有一个Gio.Icon(或C中的GIcon,我正在使用pygobject)。现在,我正在使用以下代码从Gio.Icon创建一个Gtk.Image:
image = icon and Gtk.Image(gicon=icon, icon_size=Gtk.IconSize.DIALOG, pixel_size=48, use_fallback=True)
问题是,Gio.Icon不被保证具有有效的图标名称/路径,如果没有,则显示损坏的图像图标。如果提供的Gio.Icon无效,我想使用另一个我知道存在的图标。有什么方法可以知道Gio.Icon是否无效,或者Gtk.Image是否显示为损坏的图像?
编辑
一个最小的例子:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio
win = Gtk.Window()
win.connect('destroy', Gtk.main_quit)
icon = Gio.Icon.new_for_string('gnome-garbage')
fallback_icon = Gio.Icon.new_for_string('folder')
image = Gtk.Image(gicon=icon, icon_size=Gtk.IconSize.DIALOG, pixel_size=48)
win.add(image)
win.show_all()
Gtk.main()
答案 0 :(得分:1)
我在GtkImage documentation中找到了答案:
如果文件未成功加载,则该图像将包含一个“残破的图像”图标,类似于许多网络浏览器中使用的图标。如果要处理自己加载文件时的错误(例如,通过显示错误消息),请使用gdk_pixbuf_new_from_file()加载图像,然后使用gtk_image_new_from_pixbuf()创建GtkImage。
尽管如此,我实际上需要使用GtkIconTheme而不是gdk_pixbuf_new_from_file
来获取PixBuf:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio
win = Gtk.Window()
win.connect('destroy', Gtk.main_quit)
def load_icon(icon):
info = Gtk.IconTheme.get_default().lookup_by_gicon(icon, 48, Gtk.IconLookupFlags.FORCE_SIZE)
if info:
return info.load_icon()
icon = Gio.Icon.new_for_string('gnome-garbage')
fallback_icon = Gio.Icon.new_for_string('folder')
pixbuf = load_icon(icon) or load_icon(fallback_icon)
image = Gtk.Image.new_from_pixbuf(pixbuf)
win.add(image)
win.show_all()
Gtk.main()