如何将CSS应用于Gtk3-css中的所有子元素?

时间:2015-04-06 19:09:45

标签: css css-selectors gtk3

嵌套组件问题:

我正在尝试将背景应用于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

编辑 - 使用样式类?

似乎一种方法是向窗口小部件添加样式类,然后从全局css中选择它。这里有一个例子: https://github.com/LeoUfimtsev/LeoGtk3/blob/057884368bf38a626dbaac5c575c15a5e1c93f2f/main.c#L35

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

1 个答案:

答案 0 :(得分:0)

你试过这个吗?

GtkComboBoxText * {
  background-color: red;
}

如果GTK +不支持上述css,则会支持GtkBin * {/* styles here */}GtkBin会将样式应用于GtkComboBoxText的所有子项,因此您可以将GtkBin置于{{1}内元素(在层次结构中可能还需要GtkComboBox,因此层次结构为GtkBin > GtkComboBox GtkComboBoxText)。