如何在GTK2中设置GTKListStore/GTKComboBox的背景?

6 c++ gtk combobox gtk2 background-color

我正在使用此代码创建一个带有彩色背景/文本的组合框:

GtkListStore *liststore;
GtkWidget *combo;
GtkCellRenderer *column;
liststore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
for(int i=0; i<10; i++) {
    gtk_list_store_insert_with_values(liststore, NULL, -1, 0, "Default", 1, "white", 2, "black", -1);
}
combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(liststore));
g_object_unref(liststore);
column = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column, "text", 0, "foreground", 1, "background", 2, NULL);
Run Code Online (Sandbox Code Playgroud)

它的工作原理.它看起来像这样: 在此输入图像描述

我的问题是,如何设置列表库或组合框的背景,以便图片中没有空格?谢谢!

And*_*LDM 2

我使用的是 Numix 主题,所以“边框”是红色的。您可以使用 css 覆盖主题样式:

GtkCssProvider *provider;

provider = gtk_css_provider_new ();
gtk_css_provider_load_from_data (provider, "menuitem { background: #000; } menuitem:hover { background: #FFF; } .combo { background: #000; }", -1, NULL);
gtk_style_context_add_provider (
  GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (combo))),
  GTK_STYLE_PROVIDER (provider),
  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (combo),
                                           GTK_STYLE_PROVIDER (provider),
                                           GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref (provider);
Run Code Online (Sandbox Code Playgroud)

结果如下: 截屏

这是完整的源代码: https://pastebin.com/wDeUpb8A

另请看一下GtkInspector,它是用于此类目的的方便工具。

  • 我对这个问题投了赞成票,因为答案仍然与 Gtk 用户相关。Gtk 2 不使用 CSS,但它已被弃用,新编写的代码应该使用 Gtk 3。Gtk 2 使用 rc 文件来设置样式以及一些函数和编译的主题引擎。感谢@AndreLDM 的努力。 (3认同)