减少 GTK+ 中的按钮高度

Reduce button height in GTK+

我正在创建一个列表很长的 GTK+ 3 C 应用程序。当用户单击任何列表项时,应用程序需要注册。现在我正在制作 GTK+ 按钮列表,因为样式是传达功能的最清晰方式。然而,宽大的垂直填充意味着按钮占用的空间大约是它们需要的两倍 space。

我该如何降低按钮的高度?

下图显示了我所说的填充和高度的意思。我希望文本占据垂直 space 的大部分,而不是填充。这意味着需要降低高度。

以下是我用来创建按钮的代码。 loglist 是一个垂直方向的盒子元素。

    GtkWidget* btn = gtk_button_new();
    GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
    GtkWidget* text = gtk_label_new("Data");
    gtk_box_pack_start(GTK_BOX(box), text, TRUE, TRUE, 0);
    gtk_container_add(GTK_CONTAINER(btn), box);
    gtk_widget_set_halign(text, GTK_ALIGN_START);
    gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE);
    gtk_box_pack_start(GTK_BOX(loglist), btn, FALSE, FALSE, 0);

这是我利用大家提供给我的信息得出的解决方案。

GtkCssProvider* css = gtk_css_provider_new();
GdkScreen* screen = gdk_display_get_default_screen(gdk_display_get_default());
GtkStyleContext* context;

gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(css),
        GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
gtk_css_provider_load_from_data(css,
        "button {padding-top: 0px; padding-bottom: 0px; margin-bottom: -8px;}",
        -1, NULL);

/* Insert Buttons */
context = gtk_widget_get_style_context(btn);
gtk_style_context_add_class(context, "data_btn");
/* End Insert Buttons */

g_object_unref(css);

结果如下图

"Insert Buttons" 注释之间的代码需要包含在插入按钮的其余代码中,在 btn 小部件已声明和分配之后。我用来插入按钮的代码可以在问题中看到。我在 GtkWidget 声明之后但在其他任何内容之前插入这两行。我可以使用 "button" 标签而不是“.data_btn”标签获得相同的效果,但它会影响所有按钮而不仅仅是列表。

负边距通常是不好的做法,因为如果主题发生变化,它可能而且会中断,并且它需要在所有按钮下方添加一个额外的填充框。对我来说,它是一个占位符,直到我想出别的东西,它会在未来消失。

我希望所有内容都在一个可执行文件中。如果您,通过 google 或其他方式找到它的人,没有相同的目标,那么您最好使用 css 文件。使用 gtk_css_provider_load_from_file function instead of the load_from_data 函数。