【问题标题】:How to align a GtkWidget label in the center of its GtkWidget layout in C with GTK3?如何将 C 中 GtkWidget 布局中心的 GtkWidget 标签与 GTK3 对齐?
【发布时间】:2019-07-15 18:07:18
【问题描述】:

我有以下代码,我正在努力将标签对齐在中心 它的父级(布局),但对我没有任何帮助:

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(布局), 标签, 512, 300);

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

【问题讨论】:

    标签: c widget label alignment gtk3


    【解决方案1】:

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

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

    【讨论】:

    • 你是对的,我已经最终使用了GtkGrid ...目前仍然与GtkLayout混合,但至少它正在工作。但是,我会检查您的答案是否正确,因为它是正确的,它只是帮助我确认我的方法是正确的。谢谢:)
    • 请注意一个重大差异。 GtkLayout 可以缩小,但 GtkGrid、GtkFixed 不能。这会阻止窗口收缩,以防包含的小部件无法收缩(例如 GtkLabel、GtkImage 等)。因此,如果您依赖它(例如,如果您计算新分配的大小以“调整”包含的小部件),那么您应该使用 GtkLayout。 GtkLayout 也可能比您的小部件小。在这种情况下,居中会将一些包含的小部件设置在 GtkLayout 之外(也就是部分隐藏)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多