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

如何在C中对齐gtk标签中心的文本,gtk,label,Gtk,Label,我有一个Gtk标签,我想在上面显示一行文字。例如,文本为: 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(GT

我有一个
Gtk标签
,我想在上面显示一行文字。例如,文本为:

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属性使标签填充自由的垂直空间。请参见工作示例:

#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;
}
#包括
int main(int argc,char*argv[])
{
GtkWidget*窗口、*网格、*标签;
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口_设置_标题(gtk_窗口(窗口),“应用程序示例”);
gtk_窗口设置默认大小(gtk_窗口(窗口),600,400);
grid=gtk_grid_new();
gtk_容器添加(gtk_容器(窗口),网格);
label=gtk_label_new(“Linux是一种类似Unix的计算机操作系统”);
gtk_网格附接(gtk_网格(网格),标签,0,0,1,1);
gtk_widget_set_vexpand(标签,TRUE);
gtk_widget_set_hexpand(标签,真);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}

但正如所问的,当您只有一个标签时,为什么要使用网格?可能是为了让问题更简单,但从其原始上下文来看,网格似乎膨胀了


我建议您创建UI,您的代码将更干净,您可以轻松地将UI组装在一起,而无需与API发生冲突,也无需在try-compile-assert-repeat循环中浪费数小时。也很有帮助。

如果网格上除了标签之外没有其他内容,为什么要使用网格?容器层次结构如何?网格的父元素是一个窗口?@JoséFonte我有三个标签。其中两个在左上角和右上角对齐。这个(消息标签)在它下面。所以我用了grid@S安德鲁:好的,请看Tnx的反馈。正如@AndreLDM所说,我建议您使用Glade并使用所有可用参数。您将了解布局如何在Gtk中工作,然后以编程方式实现它或使用GtkBuilder。GL@Jos是的,我知道glade,一开始我把它用于UI。但在我的应用程序中,我需要以全屏模式显示应用程序,而我在使用glade时无法做到这一点。因此,我不得不回到使用gtk来创建UI,您也可以在Glade中这样做,只需检索窗口,然后以编程方式更改参数。不管怎么说,这里的技巧是让你尝试一下布局。如果您还安装了devhelp包,那么您可以检查API/参考上对应的UI参数。