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

Posted

技术标签:

【中文标题】在 GTK3 中显示股票图标的非弃用方式是啥?【英文标题】:What is the non-deprecated way to display a stock icon in GTK3?在 GTK3 中显示股票图标的非弃用方式是什么? 【发布时间】:2016-02-24 21:03:17 【问题描述】:

我正在使用 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)

但根据this resource,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)

但结果是这样的:

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

【问题讨论】:

【参考方案1】:

看着这个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)

【讨论】:

对您发现的解释:在 PyGObject 绑定中,对象的构造函数仅采用表示对象的 GObject 属性的关键字 args。另一方面,C 构造函数通常具有额外的便利参数来设置属性,因为属性在 C 中可能很麻烦,它们被绑定为静态 new() 方法。这应该同样有效:Gtk.ToolButton(icon_widget=openIcon, label="Open")

以上是关于在 GTK3 中显示股票图标的非弃用方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

仅当缩放高于某个值时才显示markerOptions 的优化而非弃用方式

如何以非弃用方式访问 Windows 上的操纵杆?

股票火焰图怎么看,是啥意思?

K线图在股票市场中最重要的作用到底是啥?

股票里DDE是啥意思?

使用非弃用时,应为弃用和非弃用变体调用两次 shouldInterceptRequest