【发布时间】:2016-06-30 08:41:57
【问题描述】:
我已阅读并尝试了此问题的现有解决方案,但我无法让它们发挥作用。我希望有人能指出我做错了什么,或者告诉我为什么这些解决方案不再起作用。
- https://thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css/(5岁)
- Widgets to list files with gtk(2岁)
- How do you change alternating background row colors of a gtk.TreeView in pygtk?(4岁)
- https://askubuntu.com/questions/285559/how-to-reenable-alternating-grey-lines-in-nautilus-files-3-6-list-view(3岁)
我想确保这些解决方案不起作用,所以我制作了这样的样式表:
GtkTreeView row {
color: #FFFFFF;
background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
background-color: #FF00FF;
}
GtkTreeView row:nth-child(odd) {
background-color: #00FFFF;
}
用花哨的颜色,只是为了使行颜色的差异非常明显。然后,我做了一个小应用程序来加载树视图:
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
int i;
gtk_init(&argc,&argv);
//GtkBuilder* b = gtk_builder_new_from_file("derp.glade.xml");
GtkWidget* top = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkListStore* items = gtk_list_store_new(2,
G_TYPE_STRING,
G_TYPE_STRING);
GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(items));
gtk_tree_view_insert_column_with_attributes
(GTK_TREE_VIEW(view),
0,
"Herp",
gtk_cell_renderer_text_new(),
"text",0,
NULL);
gtk_tree_view_insert_column_with_attributes
(GTK_TREE_VIEW(view),
1,
"Derp",
gtk_cell_renderer_text_new(),
"text",1,
NULL);
gtk_container_add(GTK_CONTAINER(top),view);
GtkCssProvider* prov = gtk_css_provider_new();
gtk_css_provider_load_from_path
(prov,
"derp.css",
NULL);
gtk_style_context_add_provider
(gtk_widget_get_style_context(view),
GTK_STYLE_PROVIDER(prov),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
GtkTreeIter iter;
gtk_tree_model_get_iter_first(GTK_TREE_MODEL(items),&iter);
for(i=0;i<3;++i) {
gtk_list_store_insert_with_values
(items,&iter,0,
0, "Row",
1, "Row",
-1);
}
gtk_widget_show_all(top);
gtk_main();
return 0;
}
编译:
gcc -o test teststyle.c `pkg-config gtk+-3.0 --cflags --libs`
当我运行应用程序时,三行显示为 #00FFFF 作为背景颜色。他们不交替。它们只采用“row:nth-child(odd)”部分的颜色,甚至偶数行也采用该颜色。弄乱 css 文件也可以做一些有趣的事情。例如切换奇偶数:
GtkTreeView row {
color: #FFFFFF;
background-color: #FF0000;
}
GtkTreeView row:nth-child(odd) {
background-color: #FF00FF;
}
GtkTreeView row:nth-child(even) {
background-color: #00FFFF;
}
现在所有行都显示为#FF00FF,没有交替。我认为 GTK 完全无法以某种方式读取伪类,不小心将“GtkTreeView row:nth-child(odd)”变成了“GtkTreeView row”,并且完全错过了“nth-child(even)”选择器。如果我删除奇数选择器并且只有偶数:
GtkTreeView row {
color: #FFFFFF;
background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
background-color: #FF00FF;
}
现在它的背景颜色为#FF0000,所以它完全忽略(偶数)规则。
我尝试在树视图上设置规则提示,但它没有做任何事情,除了抱怨设置规则提示已被弃用。我在基本的 Arch 系统上使用 GTK 3.18.9,XFCE 作为窗口管理器。我在这里做错什么了吗?还是我的 GTK 版本搞砸了,不知何故?
【问题讨论】: