PyGTK 使用标准图像设置窗口图标

6 投票
2 回答
2884 浏览
提问于 2025-04-16 16:11

我觉得这个问题应该挺简单的,但我可能漏掉了什么。

我想用一个系统自带的图标来设置窗口的图标。我试过这样做:

windowIcon = gtk.image_new_form_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_MENU)
window.set_icon(windowIcon.get_pixbuf())

但是Python却报错说:

文件 "./sample.py",第44行,在 init
window.set_icon(windowIcon.get_pixbuf())
ValueError: 图像应该是 GdkPixbuf 或者是空的

我尝试把gtkImage转换成GdkPixbuf,因为之前不这样做时,Python报错说:

TypeError: 图标应该是 GdkPixbuf 或者 None

在pygtk的文档里说:

如果图像的存储类型不是 gtk.IMAGE_EMPTY 或者 gtk.IMAGE_PIXBUF,就会抛出 ValueError 异常。

所以我猜测系统自带的图像存储类型不对。我的问题是,怎么解决这个问题呢?

2 个回答

2

render_icon()这个方法的工作方式如上所述。你的代码出现问题是因为get_pixbuf()这个方法返回了None。这意味着图像并不是从pixbuf创建的,而且出于某种原因,它无法进行转换。获取图像的pixbuf的另一种方法是使用gtk.gdk.pixbuf_new_from_image()这个函数。

4

你可以在任何GtkWidget上使用.render_icon()这个方法来提供一个标准的图标。

windowicon = window.render_icon(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_MENU)
window.set_icon(windowicon)

撰写回答