如何在 C 中的 gtk 标签中对齐文本

How to justify text in center in gtk label in C

我有一个 Gtk Label,我想在上面显示单行文本。例如文本是:

Linux is a Unix-like computer operating system 

现在我想在标签的中心显示这段文字。但问题是它只出现在顶部。

这是我为此使用的代码:

Message_Label = gtk_label_new (" ");
gtk_grid_attach (GTK_GRID (grid), Message_Label, 0, 1, 2, 1);

gtk_label_set_line_wrap_mode(GTK_LABEL(Message_Label),PANGO_WRAP_WORD);
gtk_label_set_line_wrap(GTK_LABEL(Message_Label),TRUE);
gtk_misc_set_alignment (GTK_MISC (Message_Label), 0.5, 0.5);
gtk_label_set_justify(GTK_LABEL(Message_Label),GTK_JUSTIFY_CENTER); 

这是它的样子:

任何人都可以告诉我这里有什么问题吗?

您应该 vexpand 属性 使标签填充自由垂直 space。查看工作示例:

#include <gtk/gtk.h>

int main (int argc, char *argv[])
{
    GtkWidget *window, *grid, *label;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "App Sample");
    gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);

    grid = gtk_grid_new ();
    gtk_container_add (GTK_CONTAINER (window), grid);

    label = gtk_label_new ("Linux is a Unix-like computer operating system ");
    gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);

    gtk_widget_set_vexpand (label, TRUE);
    gtk_widget_set_hexpand (label, TRUE);

    gtk_widget_show_all (window);

    gtk_main ();

    return 0;
}

但是正如 José Fonte 所问,当您只有一个标签时,为什么要使用网格?可能是为了使问题更简单,但在其原始上下文之外,网格似乎膨胀了。

我推荐 Glade to create the UI, your code will be cleaner and you'll easily put your UI together without fighting the API and wasting hours in a try-compile-assert-repeat cycle. GtkInspector 也很有帮助。