带图像的GtkButton-左对齐

时间:2012-06-11 09:50:00

标签: gtk

我正在创建一个带有图像的按钮。我想让它左对齐,按钮边缘没有GAP。然而,尽管我将按钮对准了文本的左侧,但图像和按钮边框之间存在一个小的“固定”间隙。我怎样才能将差距归零?

以下是代码:

  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 个答案:

答案 0 :(得分: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()的信号。