gpt4 book ai didi

css - 如何在 GtkTreeView 中交替亮/暗行?

转载 作者:行者123 更新时间:2023-11-28 08:55:57 24 4
gpt4 key购买 nike

我已经阅读并尝试了这个问题的现有解决方案,但我无法让它们起作用。我希望有人能指出我做错了什么,或者告诉我为什么这些解决方案不再有效。

我想确保这些解决方案不起作用,所以我制作了一个这样的样式表:

GtkTreeView row {
color: #FFFFFF;
background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
background-color: #FF00FF;
}
GtkTreeView row:nth-child(odd) {
background-color: #00FFFF;
}

用花哨的颜色,只是为了让行颜色的差异非常明显。然后,我做了一个小应用程序来加载 TreeView :

#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,因此它完全忽略(甚至)规则。

我尝试在 TreeView 上设置规则提示,除了提示设置规则提示已被弃用外,它没有做任何事情。我在基本的 Arch 系统上使用 GTK 3.18.9,XFCE 作为窗口管理器。我在这里做错了什么吗?还是我的 GTK 版本不知何故搞砸了?

最佳答案

我认为只有 2 个街区就足够了

GtkTreeView row:nth-child(odd) {
background-color: #FF00FF;
}
GtkTreeView row:nth-child(even) {
background-color: #00FFFF;
}

下面是 python 中的示例,在回答之前测试正常

#!/usr/bin/env python3
# -*- coding: ISO-8859-1 -*-
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk

window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())

liststore = Gtk.ListStore(str, int)
liststore.append(["Oranges", 5])
liststore.append(["Apples", 3])
liststore.append(["Bananas", 1])
liststore.append(["Tomatoes", 4])
liststore.append(["Cucumber", 1])
liststore.append(["potatoes", 10])
liststore.append(["apricot", 100])

treeview = Gtk.TreeView(model=liststore)
treeview.set_rules_hint( True )
window.add(treeview)

treeviewcolumn = Gtk.TreeViewColumn("Item")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 0)

treeviewcolumn = Gtk.TreeViewColumn("Quantity")
treeview.append_column(treeviewcolumn)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
css_provider = Gtk.CssProvider()
css = """
/* font operate on entire GtkTreeView not for selected row */
GtkTreeView {font-weight: bold;font: Sans 20;font-style: italic;}
GtkTreeView row:nth-child(even) {
background-image: -gtk-gradient (linear,
left top,
left bottom,
from (#d0e4f7),
color-stop (0.5, darker (#d0e4f7)),
to (#fdffff));
}
GtkTreeView row:nth-child(odd) {
background-image: -gtk-gradient (linear,
left top,
left bottom,
from (yellow),
color-stop (0.5, darker (yellow)),
to (#fdffff));
}
/* next line only border action operate */
GtkTreeView:selected{color: white; background: green; border-width: 1px; border-color: black;}
/* next line for Gtk.TreeViewColumn */
column-header .button{color: white; background: purple;}

"""
css_provider.load_from_data(css)
screen = Gdk.Screen.get_default()
style_context = window.get_style_context()
style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

window.show_all()

Gtk.main()

关于css - 如何在 GtkTreeView 中交替亮/暗行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36002296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com