我已閱讀,並嘗試了現有的解決方案,我無法讓他們工作。我希望有人能指出我做錯了什麼,或者告訴我爲什麼這些解決方案不再有效。如何在GtkTreeView中交替亮/黑行?
- 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作爲背景色顯示。他們不交替。它們只採用「行:第n個孩子(奇數)」部分的顏色,甚至偶數行也採用該顏色。亂七八糟的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行:nth-child(odd)」變成了「GtkTreeView行」,完全錯過了「n-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版本不知怎麼搞亂了?
代碼示例前測試OK不起作用「回溯(最近通話最後一個) :文件「zebragtk.py」,第58行,在 css_provider.load_from_data(css) TypeError:項目0:必須是數字,而不是str「 –
Sam
我有點驚訝。我的gtk是版本GtK 3.8.10和python是2.7.6。代碼運行正常。我不知道是什麼。有沒有人可以解釋它? – Manmax
我正在使用GTK 3.18.2。聽起來熟悉的set_rules_hint在GTK 3.14中被折舊了https://developer.gnome.org/gtk3/3.16/GtkTreeView.html#gtk-tree-view-set-rules-hint – Sam