我已经阅读并尝试过现有的解决方案,但是它们都不能正常工作。我希望有人能指出我做错了什么,或者告诉我为什么这些解决方案不再起作用。
以下是那些解决方案:
当我运行应用程序时,三行显示为#00FFFF背景色。它们不是交替的。它们只从“row:nth-child(odd)”部分获取颜色,即使偶数行也采用该颜色。更改css文件可能会产生一些有趣的效果。例如,切换奇数和偶数:
现在所有的行都显示为#FF00FF,没有任何交替。我认为GTK在某种情况下完全无法读取伪类,偶然地将“GtkTreeView row:nth-child(odd)”转换为“GtkTreeView row”,而完全忽略了“nth-child(even)”选择器。如果我删除奇数选择器,只剩下偶数选择器:
现在它的背景颜色是#FF0000,所以它完全忽略了规则。我曾尝试在树形视图中设置规则提示,但除了抱怨规则提示已被弃用外,什么也没做。我使用的是3.18.9版本的GTK,在基本的Arch系统上,窗口管理器是XFCE。我这里有什么问题吗?还是我的GTK版本出了问题?
以下是那些解决方案:
- https://thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css/(5年前)
- 使用gtk列出文件的小部件(2年前)
- 如何在pygtk中更改gtk.TreeView的交替背景行颜色?(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,所以它完全忽略了规则。我曾尝试在树形视图中设置规则提示,但除了抱怨规则提示已被弃用外,什么也没做。我使用的是3.18.9版本的GTK,在基本的Arch系统上,窗口管理器是XFCE。我这里有什么问题吗?还是我的GTK版本出了问题?
pkg-config --cflags --libs gtk+-3.0
derp.c```编译,但它仍然忽略了(even)
选择器。我有GTK 3.18.9。不知道为什么Python不起作用,但我怀疑是过度分层的抽象接口所致。 - cyisfor