0

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

这是代码:

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

谢谢你。

4

1 回答 1

1

主题可能会添加一些填充和/或边框空间。这变得复杂,因为不同的用户可能出于不同的原因有不同的主题。因此,保留这些特定于主题的设置通常是一个好主意。话虽如此,在某些情况下您需要覆盖这些设置。例如,一个文本编辑器的选项卡有一个 GtkButton 和一个 GTK_STOCK_CLOSE 按钮。此按钮需要删除所有填充和边框,以便它只是其图像的大小。您可以根据需要调整此技术。

在 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.

于 2012-06-12T03:36:48.770 回答