我的标签应该左对齐,并且都应该具有相同的宽度。我正在使用GtkSizeGroup
来实现大小调整(因为标签并非都具有相同的父级)。不幸的是,这似乎打破了对齐:使用下面的代码,标签在中间水平对齐,即使我要求GTK_ALIGN_START
。如果我删除了sizegroup,则标签会按照它们的开头对齐。
/* gcc `pkg-config --libs --cflags gtk+-3.0` label-align-test.c */
#include <gtk/gtk.h>
int main(int argc, char **argv)
{
GtkSizeGroup *group;
GtkWidget *window, *grid, *label1, *label2;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
grid = gtk_grid_new ();
gtk_container_add (GTK_CONTAINER (window), grid);
label1 = gtk_label_new ("label 1");
gtk_widget_set_halign (label1, GTK_ALIGN_START);
gtk_grid_attach_next_to (GTK_GRID (grid), label1,
NULL, GTK_POS_BOTTOM,
1, 1);
label2 = gtk_label_new ("label 2 with longer text");
gtk_widget_set_halign (label2, GTK_ALIGN_START);
gtk_grid_attach_next_to (GTK_GRID (grid), label2,
label1, GTK_POS_BOTTOM,
1, 1);
group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget (group, label1);
gtk_size_group_add_widget (group, label2);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
我有什么遗漏或这是一个错误吗?
我正在使用GTK + 3.13.6进行测试。我意识到该示例不需要sizegroup,但在实际代码中,标签具有不同的父级,因此需要它。我可以通过在标签周围添加容器并将容器放入大小组来解决此问题:然后标签也开始正确对齐。
答案 0 :(得分:3)
我不知道它是否有所作为,但值得一试:
您是否尝试使用gtk_label_set_xalign (label1, 0.0)
代替gtk_widget_set_halign (label1, GTK_ALIGN_START)
?
答案 1 :(得分:1)
这确实是unfinished feature:在GTK + 3.16之前,最简单的解决方案仍然是使用gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.5);
,即使它已被弃用。
正如亚历克斯在其他答案中提到的gtk_label_set_xalign (label1, 0.0)
是现代GTK +中的一个很好的解决方案(&gt; = 3.16)。