如何使用GTK3在C中将其GtkWidget布局的中心对齐GtkWidget标签?

时间:2019-02-21 18:13:42

标签: 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_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;
}

我还尝试了一些我可以在GENOME文档中找到的其他功能以及其他SO问题,但是它们大多已被弃用,或者也无法使用。此时,当我使用GTK3时,推荐的方法似乎是:

  

gtk_widget_set_halign(label,GTK_ALIGN_CENTER);

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

  

gtk_layout_put(GTK_LAYOUT(layout),label,512,300);

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

1 个答案:

答案 0 :(得分:1)

GtkLayout与其相对的GtkFixed一样,是一种最后使用的容器,在没有其他容器可用于您的目的时,您可以使用它。它只是将小部件放在您指定它们的位置。因此,水平对齐API将不起作用。使用GtkLayout,您必须自己计算对齐方式。

我建议使用GtkGrid或另一个功能更全的容器。