在GTK3中显示股票图标的不推荐方法是什么?

aaa*_*ine 7 python pygobject gtk3

我正在使用PyGObject组装GUI.这个Python代码在上下文中工作.我得到一个带有"打开"图标的工具栏按钮.

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)
Run Code Online (Sandbox Code Playgroud)

图像显示工具栏上显示的图标.

但根据此资源,new_from_stock()已弃用:

因为3.10版本不推荐使用:使用Gtk.ToolButton.new ()连同Gtk.Image.new_from_icon_name ()代替.

好吧.所以在进一步挖掘之后,这就是我想要替换的:

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)
Run Code Online (Sandbox Code Playgroud)

但这是结果:

图像显示工具栏上没有显示图标.

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

aaa*_*ine 5

看看这个C++ GitHub示例,我很惊讶发现直接调用静态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)
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这会显示另一种方法没有的图标.

奖励:以上的清洁版:

# 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)
Run Code Online (Sandbox Code Playgroud)

  • 对您发现的内容的解释:在 PyGObject 绑定中,对象的构造函数仅采用表示对象的 GObject 属性的关键字参数。另一方面,C 构造函数通常具有额外的方便参数来设置属性,因为属性在 C 中可能很麻烦,因此被绑定为静态 `new()` 方法。这应该同样有效:`Gtk.ToolButton(icon_widget=openIcon) , 标签=“打开”)` (2认同)