Я прочитал и пробовал существующие решения для этого вопроса, и я не могу заставить их работать. Я надеялся, что кто-то может указать, что я делаю неправильно, или сказать мне, почему эти решения больше не работают.Как чередовать светлые/темные строки в 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 как цвет фона. Они не чередуются. Они принимают только цвет из раздела «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: nth-child (нечетно)» в «строку GtkTreeView» и полностью исключая селектор nth-child (even) ». Если удалить нечетные селектор и только даже:
GtkTreeView row {
color: #FFFFFF;
background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
background-color: #FF00FF;
}
Теперь у него есть фоновый цвет # FF0000, поэтому он игнорирует (даже) правила полностью.
Я попытался установить правила, намекающие на древовидную структуру, и ничего не сделал, кроме как жаловаться на то, что установка подсказки правил была устаревшей. Я использую GTK 3.18.9, в базовой системе Arch, с XFCE в качестве диспетчера окон. Я делаю что-то неправильно здесь? Или моя версия GTK просто испортилась?
Пример кода не работает «TraceBack (самый последний вызов последнего) : Файл «zebragtk.py», строка 58, в css_provider.load_from_data (css) TypeError: Item 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