如何在GTK4中通过对象id应用CSS属性



我从头开始学习GTK4,使用GTKBuilder XML构建对象,使用CSS从文件中添加样式信息,使用:

const char cssPath[] = "/a/path/that/is/confirmed/to_be/working.css";
GtkCssProvider * cssProvider = gtk_css_provider_new();
gtk_css_provider_load_from_path(cssProvider, cssPath);
gtk_style_context_add_provider_for_display(gdk_display_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

当我使用一个通用的CSS选择器时,我的风格变化会产生影响,比如:

box { background-color: white; }
/* box goes white as expected */

但是当我尝试使用特定对象的id="0"来瞄准它时;myBox";XML属性,它不起作用:

box#myBox { background-color: white; }
/* no colour change happens */

#myBox { background-color: white; }
/* no colour change happens here either */

我的XML.ui文件中的相关部分是:

<object class="GtkBox" id="myBox">
<property name="halign">GTK_ALIGN_CENTER</property>
<child>
<object class="GtkLabel" id="centreLabel">
<property name="single-line-mode">true</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>

也许我误解了CSS选择器相对于使用GtkBuilder实例化的对象的工作方式?我已经阅读了文档,所以我非常感谢任何人在这里提供的帮助!

干杯。

使用UI文件中的name属性,可以设置希望<object>具有的特定Css名称。为了使用这个自定义名称,您还需要将#放在Cs中的myBox名称前面,这已经完成了。

要定义name属性,只需在UI文件中的Box对象下添加此行:

<property name="name">myBox</property>

以下是您的UI文件应该是什么样子:

<object class="GtkBox" id="myBox">
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="name">myBox</property>
<child>
<object class="GtkLabel" id="centreLabel">
<property name="single-line-mode">true</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>

以下是Cs应该是什么样子(你已经这样做了(:

#myBox { background-color: white; }

我刚刚用GTK3完成了这项工作。可怕的文档。

无论如何,我遇到了和您完全相同的问题,解决方案是忽略GTK文档(见图(。

您需要以下内容来引用命名节点,我将使用您的示例:

box#myBox { background-color: white; }

更改为:

#myBox box{ background-color: white; }

GTK网站上没有列出此解决方案。

最新更新