在盒子或其他容器中对齐小部件(例如 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);
在垂直容器(例如框或框架等)中对齐不同(文本)小部件的最佳做法是什么?请不要硬编码解决方案。
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);