2017-06-05 40 views
6

Tôi đang sử dụng mã này để tạo ra một combo box với màu nền/văn bản:Làm cách nào tôi có thể đặt nền của GTKListStore/GTKComboBox trong GTK2?

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); 

và nó hoạt động. Có vẻ như sau: enter image description here

Câu hỏi của tôi là, làm cách nào để đặt nền của cửa hàng hoặc hộp tổ hợp sao cho không có khoảng trắng như trong hình? Cảm ơn!

Trả lời

2

Tôi đang sử dụng chủ đề Numix, do đó, "đường viền" màu đỏ. Bạn có thể sử dụng css để ghi đè lên phong cách chủ đề:

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); 

Dưới đây là kết quả: screenshot

Và đây là toàn bộ mã nguồn: https://pastebin.com/wDeUpb8A

Ngoài ra hãy xem tại GtkInspector, đó là một công cụ hữu ích cho các mục đích như vậy.

+1

Điều này không chỉ hoạt động cho GTK3? Xin lỗi nếu tôi hiểu lầm điều gì đó. –

+0

Đã cập nhật câu trả lời, tôi đang sử dụng GTK 3.22. – AndreLDM

+0

Hãy giải thích rõ ràng trong câu hỏi rằng bạn đang sử dụng phiên bản GTK không dùng nữa, chỉ cần một thẻ dễ bỏ qua. – AndreLDM

Các vấn đề liên quan