Gtk3-css中如何对所有子元素应用css?

问题描述 投票:0回答:2

嵌套组件的问题:

我正在尝试将背景应用于 GtkComboBoxText。

我正在获取小部件的上下文并将 CSS 应用于它:

 * { background: red } 

这不会改变 GtkComboBoxText 的颜色。但它适用于 GtkButton 和 GtkLabel。

查看 GtkInspector,似乎 GtkComboBoxText 有嵌套控件,如 GtkToggleButton 和 GtkEntry,上面的 CSS 没有应用到它们。 如果我通过 gtk_container_forall(..) 手动遍历所有嵌套组件并挑选出选定的组件,那么背景着色就会起作用。但我似乎无法找到一种方法将 CSS 一次应用于 GtkComboBoxText 并让它渗透到所有孩子?

这可能吗?

测试片段

可以在 repo 中找到测试片段: https://github.com/LeoUfimtsev/LeoGtk3/tree/3_GtkCombo_background

运行:

  git clone https://github.com/LeoUfimtsev/LeoGtk3.git
  make
  ./main

尝试过的东西:

 * {background:red}
 * {background-color:red} //no impact

 GtkComboBoxText * { background: red}
 GtkComboBoxText * { background-color: red}

请注意:

如果我运行代码片段,然后打开 CSS 检查器,然后应用:

 * {background: red} 

每个单独的子小部件:

GtkComboBoxText
- GtkToggleButton <<
- GtkTreeMenu<<

然后背景着色工作。

enter image description here

编辑 - 使用样式类?

好像有一种方法是给widget加一个style class,然后从global css中select。一个例子在这里: https://github.com/LeoUfimtsev/LeoGtk3/blob/057884368bf38a626dbaac5c575c15a5e1c93f2f/main.c#L35

但是,如果您要在 GTK 之上实现图形库,这是不切实际的,因为您需要处理 1000 个类。

css css-selectors gtk3
2个回答
1
投票

你试过这个吗?

GtkComboBoxText * {
  background-color: red;
}

如果 GTK+ 不支持上述 css,它确实支持

GtkBin * {/* styles here */}
,它将样式应用于
GtkBin
的所有子级,因此您可以将
GtkComboBoxText
放在
GtkBin
元素中(这可能还需要
GtkComboBox 
在层次结构中排在第一位,因此层次结构为
GtkBin > GtkComboBox GtkComboBoxText
)。


0
投票

基于 documentation 3.20+ 我发现这个工作:

button.toggle {
  background: red;
}

button.toggle:checked {
  background: blue;
}

背景颜色不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.