我有一个用 GTK 编写的应用程序,我只是在通过 GTK Inspector 尝试主题更改。我甚至探索了 GitHub 上提供的其他主题。是否可以让我的应用程序的最终用户能够在软件内部更改主题?我知道可以在执行应用程序时为其设置 GTK_THEME 环境变量,并且我还发现可以使用以下方法在代码内部更改主题(使用默认的 C 语言绑定):
setenv("GTK_THEME", "Ambiance", 1);
但这仅在运行前设置此变量时才有效。gtk_init().
之后尝试这样做不会成功。是否有任何可能的方法可以让用户更改主题并使其立即生效(就像通过 GTK Inspector 完成的那样)?任何帮助都将不胜感激。
答案1
好吧,我通过查看 GTK Inspector 源代码来回答我自己的问题,看看他们是如何做到的。我使用的是 GTK 3.24,所以如果你使用的是 GTK4(弃用),这看起来会有点不同:
GtkSettings *settings;
gchar *theme_name = "Ambiance";
settings = gtk_settings_get_default();
g_object_set(settings, "gtk-theme-name", theme_name, NULL);
主题名称可以从某个地方动态分配,我这样做只是为了测试它是否有效。请注意,如果您设置了 GTK_THEME 环境变量,这将不起作用。