gpt4 book ai didi

css - 在 Gtk3 中使用 CSS 的 GtkTreeView

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:38 25 4
gpt4 key购买 nike

如何使用 Gtk3 的 CSS 使 GtkTreeView 中的每一行都具有不同的颜色?我试过使用:even-row-color、-GtkWidget-even-row-color 和 GtkTreeView row:nth-child(even)。我在 Ubuntu natty 上使用 gtk+-3.2.3。

/* COMPILE WITH: gcc -Wall -o tree1 `pkg-config --cflags --libs gtk+-3.0` tree1.c */

#include <gtk/gtk.h>
enum
{
LIST_ITEM = 0,
N_COLUMNS
};

static void
init_list(GtkWidget *list)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkListStore *store;

/******************** CSS *****************************************************/

GtkCssProvider *provider = gtk_css_provider_new ();

gtk_css_provider_load_from_data (provider, "GtkTreeView {\n"
" -GtkWidget-even-row-color: green;\n"
" color: white;\n"
"}\n", -1, NULL);

GdkDisplay *display = gdk_display_get_default ();
GdkScreen *screen = gdk_display_get_default_screen (display);
gtk_style_context_add_provider_for_screen (screen,
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref (provider);

/*********************************************************************************/
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("List Items",
renderer, "text", LIST_ITEM, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);

gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store));

g_object_unref(store);
}

static void
add_to_list(GtkWidget *list, const gchar *str)
{
GtkListStore *store;
GtkTreeIter iter;

store = GTK_LIST_STORE(gtk_tree_view_get_model
(GTK_TREE_VIEW(list)));

gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, LIST_ITEM, str, -1);
}

void on_changed(GtkWidget *widget, gpointer label)
{
GtkTreeIter iter;
GtkTreeModel *model;
char *value;

if (gtk_tree_selection_get_selected(
GTK_TREE_SELECTION(widget), &model, &iter)) {

gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1);
gtk_label_set_text(GTK_LABEL(label), value);
g_free(value);
}
}

int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *list;
GtkWidget *vbox;
GtkWidget *label;
GtkTreeSelection *selection;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
gtk_widget_set_size_request(window, 270, 250);
gtk_window_set_title(GTK_WINDOW(window), "List View");

list = gtk_tree_view_new();
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);

vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5);

label = gtk_label_new("");
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);

gtk_container_add(GTK_CONTAINER(window), vbox);

init_list(list);
add_to_list(list, "First");
add_to_list(list, "Second");
add_to_list(list, "Third");
add_to_list(list, "Fourth");
add_to_list(list, "Fifth");

selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

g_signal_connect(selection, "changed",
G_CALLBACK(on_changed), label);

g_signal_connect(G_OBJECT (window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);
gtk_main ();
return 0;
}

最佳答案

您可能必须先启用交替颜色,方法是:

gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list), TRUE);

我不确定这一点,因为我还没有玩过 GTK 3 CSS。

关于css - 在 Gtk3 中使用 CSS 的 GtkTreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946016/

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