在 PyGtk 中将窗口图标设置为 Gtk Stock 图标

Ano*_*sta 2 icons python gtk pygtk application-development

我想在我的窗口中添加一个 Gtk 股票图标。这是代码:

#! /usr/bin/python

from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title='My Window Title')

        self.icon = self.render_icon(Gtk.STOCK_FLOPPY, 1)
        self.set_icon(self.icon)

        self.connect('delete-event', Gtk.main_quit)

win = MyWindow()
win.show_all()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)

根据此页面图标大小应该是Gtk 图标大小常量之一, 但 Eclipse 代码完成不显示任何列出的值,如果我手动输入其中之一,我会得到

AttributeError: 'gi.repository.Gtk' 对象没有属性 'ICON_SIZE_SMALL_TOOLBAR'

如果我将图标大小设置为文字 1,脚本就可以工作。我确定这与 Gtk 或 PyGtk 版本有关,但我无法弄清楚我做错了什么。在此先感谢并为新手问题感到抱歉。

Tim*_*imo 8

问题是您正在查看 PyGTK 文档,但在您的脚本中使用了 PyGI/GTK3。

上的文档gtk_widget_render_icon()说明如下:

gtk_widget_render_icon 自 3.0 版起已被弃用,不应在新编写的代码中使用。使用 gtk_widget_render_icon_pixbuf() 代替。

然后文档上gtk_widget_render_icon_pixbuf()说:

gtk_widget_render_icon_pixbuf 自 3.10 版起已弃用,不应在新编写的代码中使用。使用 gtk_icon_theme_load_icon() 代替。

很棒吧?!所以让我们继续。

gtk_icon_theme_load_icon() 采用以下参数:

  • icon_name : 要查找的图标的名称
  • size :所需的图标大小。生成的图标可能不是这个大小
  • flags : 修改图标查找行为的标志

知道这一点,您可以render_icon使用以下内容更改旧行:

        icontheme = Gtk.IconTheme.get_default()
        self.icon = icontheme.load_icon(Gtk.STOCK_FLOPPY, 128, 0)
Run Code Online (Sandbox Code Playgroud)

这将查找 128x128 像素的图像。如果需要,您可能想要更改标志,枚举记录在此处。这可以像这样翻译成 Python:

GTK_ICON_LOOKUP_NO_SVG -> Gtk.IconLookupFlags.NO_SVG
GTK_ICON_LOOKUP_FORCE_SVG -> Gtk.IconLookupFlags.FORCE_SVG
GTK_ICON_LOOKUP_USE_BUILTIN -> Gtk.IconLookupFlags.USE_BUILTIN
# And so on...
Run Code Online (Sandbox Code Playgroud)