在 GTK3 中显示股票图标的非弃用方式是什么?

What is the non-deprecated way to display a stock icon in GTK3?

我正在使用 PyGObject 组装 GUI。此 Python 代码在上下文中工作。我得到了一个带有股票 "Open" 图标的工具栏按钮。

from gi.repository import Gtk

# ...

toolbar = Gtk.Toolbar()
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

# ...

self.fileOpen = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN)
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate)
toolbar.insert(self.fileOpen, -1)

但根据 this resourcenew_from_stock() 已弃用:

Deprecated since version 3.10: Use Gtk.ToolButton.new () together with Gtk.Image.new_from_icon_name () instead.

那好吧。所以在进一步挖掘之后,这就是我想出的替代品:

self.fileOpen = Gtk.ToolButton(
        Gtk.Image.new_from_icon_name("document-open",
                                     Gtk.IconSize.LARGE_TOOLBAR),
        "Open")
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate)
toolbar.insert(self.fileOpen, -1)

但这是结果:

当前 GTK 库仍然支持的正确方法是什么?

查看此 C++ GitHub example,我惊讶地发现直接调用静态 new() 函数而不是构造函数。

所以我决定尝试一下。仔细看看区别。很微妙。

                              #vvv
self.fileOpen = Gtk.ToolButton.new(
        Gtk.Image.new_from_icon_name("document-open",
                                     Gtk.IconSize.LARGE_TOOLBAR),
        "Open")
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate)
toolbar.insert(self.fileOpen, -1)

令我惊讶的是,这显示了其他方法没有的图标。

奖励: 上面的清洁版本:

# iconSize to be reused
iconSize = Gtk.IconSize.LARGE_TOOLBAR

# ...

openIcon = Gtk.Image.new_from_icon_name("document-open", iconSize)
self.fileOpen = Gtk.ToolButton.new(openIcon, "Open")
self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate)
toolbar.insert(self.fileOpen, -1)