Gtk 获取股票ID的图标名称? 问题:

Gtk 获取股票ID的图标名称? 问题:,gtk,Gtk,我正在尝试检索与给定(字符串)Gtk股票ID对应的(字符串)图标名称 例子 Gtk股票id“Gtk前进”有两个对应的图标名称,“Gtk前进ltr”和“Gtk前进rtl”。我想检索以下任一项: 给定ID为“gtk前进”的图标名称“gtk前进ltr”和“gtk前进rtl”或 只需图标名“gtk前进ltr”(适合我的文字方向的图标名) 潜在限制 我使用的是gobject内省API,而不是基本的C API 理由(可选阅读) 我正在尝试为股票ID指定的图标创建一个更大的图标,但大小更大(96像素) 我

我正在尝试检索与给定(字符串)Gtk股票ID对应的(字符串)图标名称

例子 Gtk股票id“Gtk前进”有两个对应的图标名称,“Gtk前进ltr”和“Gtk前进rtl”。我想检索以下任一项:

  • 给定ID为“gtk前进”的图标名称“gtk前进ltr”和“gtk前进rtl”
  • 只需图标名“gtk前进ltr”(适合我的文字方向的图标名)
潜在限制 我使用的是gobject内省API,而不是基本的C API

理由(可选阅读) 我正在尝试为股票ID指定的图标创建一个更大的图标,但大小更大(96像素)

我可以像这样直接使用股票ID“gtk go forward”(它选择LTR版本)(语法是GNOME javscript,但这与问题无关;我使用的是GObject自省API):

这将给我一个股票ID“gtk前进”(它选择“gtk前进ltr”)的图标,但是图标非常模糊

或者如果我直接输入图标名称“gtk前进ltr”,则图标不模糊:

因此,总而言之,我认为获取大型非模糊图标的最佳方法是找到股票ID的图标名称,而不是使用股票ID(将
gtk前进到上面的第二种方法会生成“缺少的图标”图标,因为它不是有效的图标名称)


在上图中,顶部图标使用第一种方法(带有render_图标的股票ID),底部图标使用第二种方法(直接使用图标名称)。清晰度差异很大。

GTK_图标大小_对话框
GTK.IconSize.DIALOG
在Javascript中)小于96px。渲染一个小图标,然后将其放大;很自然,它看起来会很糟糕

我记得,值
-1
返回图标的原始大小。然后,您可以使用St.Icon设置要绘制它的大小,因为这似乎是您无论如何都要使用它的方式。

常规股票图标名称 这个问题现在有点老了,但供将来参考:最好使用
“下一步”
,而不是
“gtk前进”
——根据,这是正确的名称,建议使用,因为gtk开发人员正计划使用

为了直接回答标题中所述的问题:下面是一个例子,给出了GTK股票图标的等效图标规范名称

GTK图标的非模糊大版本 至于获得默认图标的非模糊版本,我发现在GTK中以96px渲染图标的最好方法是将其加载到
GdkPixbuf
,然后使用它,而不是
GtkIcon
(限制为48px,正如j_um指出的那样,这是最大的
GtkIconSize
)。如何在Vala中执行此操作的示例(很容易转换为JS或Python等):

您可能还想尝试使用
Gtk.IconLookupFlags.FORCE_SIZE
和/或
FORCE_SVG
,特别是如果您想要非常大的图标

恐怕我从未使用过Shell工具包,所以我不知道您是否特别需要
St.Icon
,但在普通GTK中,您可以在几乎任何可以使用股票图标的地方使用
GdkPixbuf
,因此我发现这是一个非常有用的解决方法

let style = Gtk.Widget.get_default_style();
let iconset = style.lookup_icon_set('gtk-go-forward');
let icon = new St.Icon({
    gicon: iconset.render_icon(gtkStyle, Gtk.TextDirection.LTR,
                               Gtk.StateType.NORMAL, Gtk.IconSize.DIALOG,
                               null, null),
    icon_type: St.IconType.FULLCOLOR,
    icon_size: 96
});
let icon = new St.Icon({
    gicon: Gio.ThemedIcon.new_with_default_fallbacks('gtk-go-forward-ltr'),
    icon_type: St.IconType.FULLCOLOR,
    icon_size: 96
});
var icon_theme = Gtk.IconTheme.get_default();
try {
    var pixbuf = icon_theme.load_icon("go-next", 96, Gtk.IconLookupFlags.USE_BUILTIN);
    // Do something with the pixbuf, for example use it with a CellRendererPixbuf,
    // or a GtkButton or whatever
catch (GLib.Error e) {
    GLib.critical("Could not load icon: %s", e.message);
}