在盒子或其他容器中对齐小部件(例如 GtkLabel 和 GtkEntry)——最佳实践

Align widgets (e.g. GtkLabel and GtkEntry) in boxes or other containers - best practice

在垂直容器(例如框或框架等)中对齐不同(文本)小部件的最佳做法是什么?请不要硬编码解决方案。

enter image description here

#include <gtk/gtk.h>

int main(int argc, char** argv) {
    GtkWidget *window, *hbox, *vbox[2];

    gtk_init(NULL,NULL);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_container_set_border_width (GTK_CONTAINER(window), 10);

    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,  10);
    vbox[0] = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
    vbox[1] = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
    gtk_container_add(GTK_CONTAINER(window), hbox);
    gtk_container_add(GTK_CONTAINER(hbox), vbox[0]);
    gtk_container_add(GTK_CONTAINER(hbox), vbox[1]);

    gtk_box_pack_start(GTK_BOX(vbox[0]), gtk_label_new("name"), FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox[0]), gtk_label_new("first name"), FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox[0]), gtk_label_new("village"), FALSE, FALSE, 0);

    gtk_box_pack_start(GTK_BOX(vbox[1]), gtk_entry_new(), FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox[1]), gtk_entry_new(), FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox[1]), gtk_entry_new(), FALSE, FALSE, 0);

    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show_all(window);

    gtk_main();
    return 0;
}

感谢您的帮助

你要的是GtkGrid:

GtkGrid — 在行和列中打包小部件

GtkWidget *grid = gtk_grid_new();

并附上内容:

gtk_grid_attach(grid, gtk_label_new("name"),       0, 0, 1, 1);
gtk_grid_attach(grid, gtk_label_new("first name"), 0, 1, 1, 1);
gtk_grid_attach(grid, gtk_label_new("village"),    0, 2, 1, 1);

gtk_grid_attach(grid, gtk_entry_new(),             1, 0, 1, 1);
gtk_grid_attach(grid, gtk_entry_new(),             1, 1, 1, 1);
gtk_grid_attach(grid, gtk_entry_new(),             1, 2, 1, 1);