gpt4 book ai didi

不推荐使用Gtk.stock,还有什么选择?

转载 作者:行者123 更新时间:2023-12-04 11:35:20 25 4
gpt4 key购买 nike

我一直在学习向Gtk进行开发,并且在线上的大多数示例都建议使用Gtk.stock图标。但是,使用它会产生警告,表明它已被弃用,我找不到这些图标的替代品。

代码示例为:

    open_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.OPEN)
open_button.clicked.connect (openfile)

new_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.NEW)
new_button.clicked.connect (createNew)

save_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.SAVE)
save_button.clicked.connect (saveFile)

生成错误为:
   /tmp/text_editor-exercise_7_1.vala.c:258:2: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations]
_tmp1_ = (GtkToolButton*) gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);

哪个是替代方法,在上面的代码中将如何显示?

最佳答案

GTK + 3已移至freedesktop.org Icon Naming Specification和国际化标签。以Gtk.Stock.OPEN为例。 GNOME Developer documentation for GTK_STOCK_OPEN提供了两个替换:

GTK_STOCK_OPEN has been deprecated since version 3.10 and should not be used in newly-written code. Use named icon "document-open" or the label "_Open".



命名图标方法

命名的图标方法将类似于:
var open_icon = new Gtk.Image.from_icon_name( "document-open",
IconSize.SMALL_TOOLBAR
)
var open_button = new Gtk.ToolButton( open_icon, null )

标签方法

label方法使用 gettext将标签转换为程序的当前运行时语言。标签前的下划线表示。您程序中的行将是:
var open_button = new Gtk.ToolButton( null, dgettext( "gtk30", "_Open") )
gettext使用域,即包含翻译的文件。 Gtk + 3域是 gtk30。您还需要在程序的开头添加一行,以将C语言的默认语言环境(即美国英语ASCII)更改为运行时环境的语言环境:
init
Intl.setlocale()

要编译Genie程序,您需要为 gettext设置默认域。通常将其设置为空:
valac -X -DGETTEXT_PACKAGE --pkg gtk+-3.0 my_program.gs

当您运行程序时,您将获得“_Open”转换为您的语言环境。您还可以更改语言环境。如果您安装了法语语言环境,请使用以下命令运行程序:
LC_ALL=fr ./my_program

将以法语显示“_Open”标签。

您可能会在示例 _( "_OPEN" )中看到。 _()dgettext类似,但使用默认域。您可能希望将默认域保留为自己程序的翻译文件。与 _( "_translate me" )相比,使用 dgettext( "mydomain", "_translate me" )的键入要少一些。要在Genie中设置默认域,请在 init之前添加一行:
const GETTEXT_PACKAGE:string = "mydomain"

init
Intl.setlocale()

关于不推荐使用Gtk.stock,还有什么选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com