2012-06-11 50 views
0

我正在創建一個帶有圖像的按鈕。我想讓它左對齊,並從按鈕的邊緣沒有間隙。不過,儘管我將按鈕對齊到文本的左側,但圖像和按鈕邊框之間存在一個小的「固定」間隙。我怎樣才能消除差距?帶圖像的GtkButton向左對齊

下面是代碼:

GtkWidget *button; 
    GtkWidget *buttonImage; 

    GtkSettings *default_settings = gtk_settings_get_default(); 
    g_object_set(default_settings, "gtk-button-images", TRUE, NULL); 

    buttonImage = gtk_image_new(); 
    gtk_image_set_from_file(GTK_IMAGE(buttonImage),"icon.jpg"); 

    button= gtk_button_new_with_label("Click"); 
    gtk_button_set_relief ((GtkButton *)button, GTK_RELIEF_NONE); 
    gtk_button_set_image((GtkButton *)button, buttonImage); 
    gtk_button_set_image_position((GtkButton *)button, GTK_POS_LEFT); 

謝謝。

回答

1

主題可能會添加一些填充和/或邊框空間。由於不同的用戶因不同的原因可能具有不同的主題,這變得複雜。因此,將這些主題特定的設置保持原樣通常是一個好主意。這就是說,有些情況下你需要重寫這些設置。例如,文本編輯器的選項卡中有一個帶GTK_STOCK_CLOSE按鈕的GtkButton。此按鈕需要刪除所有填充和邊框,以便它只是其圖像的大小。你可以根據你的需要調整這個技巧。

在GTK + 3中,這可以通過GtkCssProvider和GtkStyleContext完成。

const gchar data[] = * { " 
    "-GtkButton-default-border : 0; " 
    "-GtkButton-default-outside-border : 0; " 
    "-GtkButton-inner-border: 0; " 
    "-GtkWidget-focus-line-width : 0; " 
    "-GtkWidget-focus-padding : 0; " 
    "padding: 0; " 
    "}"; 

context = gtk_widget_get_style_context (GTK_WIDGET(button)); 
provider = gtk_css_provider_new(); 
gtk_css_provider_load_from_data (provider, data, -1, NULL); 
gtk_style_context_add_provider (context, 
           GTK_STYLE_PROVIDER (provider), 
           GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); 

該代碼可能並不完全正確,但它應該指向正確的方向。我只用Python實現了這種技術。

如果您正在爲GTK + 2開發,我曾經這樣做的方式是在回調函數中調用gtk_widget_set_size_request()來調用GtkButton的「樣式集」信號。