减少 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 函数。
我正在创建一个列表很长的 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 函数。