如何将C中GtkWidget布局中心的GtkWidget标签与GTK3对齐?

如何将C中GtkWidget布局中心的GtkWidget标签与GTK3对齐?,c,widget,label,alignment,gtk3,C,Widget,Label,Alignment,Gtk3,我有下面的代码,我正在努力使标签在中心对齐 它的父级(布局),但对我来说没有任何效果: int main(int argc, char ** argv){ GtkWidget *window; GtkWidget *layout; GtkWidget *label; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_s

我有下面的代码,我正在努力使标签在中心对齐 它的父级(布局),但对我来说没有任何效果:

int main(int argc, char ** argv){
    GtkWidget *window;
    GtkWidget *layout;
    GtkWidget *label;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 1024, 600);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    layout = gtk_layout_new(NULL, NULL);
    gtk_container_add(GTK_CONTAINER (window), layout);

    label = gtk_label_new(NULL);
    gtk_label_set_text(GTK_LABEL(label), "SOME TEXT");
    gtk_layout_put(GTK_LAYOUT(layout), label, 0, 0);

    // Here I'm trying to align my label to the center,
    // but it doesn't work with any of the three functions
    gtk_widget_set_halign(label, GTK_ALIGN_CENTER);
    //gtk_label_set_xalign(GTK_LABEL(label), GTK_ALIGN_CENTER);
    //gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);




    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
我还尝试了一些在基因组文档和其他SO问题中可以找到的其他功能,但它们大多被弃用,或者也不起作用。在这一点上,当我使用GTK3时,推荐的方法似乎是:

gtk_widget_set_halign(标签,gtk_对齐_中心)

但它不起作用。标签仍在我放置的位置:

gtk_布局(布局),标签,512300


代码编译时没有任何错误或警告。

GtkLayout
,就像它的相对
GtkFixed
一样,是一种最后的容器,当其他容器都不能满足您的需要时,您可以使用它。它只是将小部件放在您指定的位置。因此,水平对齐API将无法工作。使用
GtkLayout
,您必须自己计算路线


我建议使用
GtkGrid
或其他功能更全的容器。

你说得对,我已经使用了
GtkGrid
。。。目前仍然与
GtkLayout
混合使用,但至少它正在工作。然而,我会检查你的答案是否正确,因为它是正确的,它只是帮助我确认我走在正确的道路上。谢谢:)请注意一个很大的区别。GtkLayout可以收缩,但GtkGrid、GtkFixed不能。这会阻止窗口缩小,以防包含的小部件无法缩小(例如GtkLabel、GtkImage等)。因此,如果您依赖它(例如,如果您计算新分配的大小以便“调整”包含的小部件),那么您应该使用GtkLayout。此外,GtkLayout可能比您的小部件小。在这种情况下,居中将在GtkLayout之外设置一些包含的小部件(也称为部分隐藏)。