gtk-listbox -contents在水平线中间显示,listbox不适合窗口大小

我在gtk问题中写了一个listbox的代码1.列表框的内容显示在水平线的中间。 我希望它左alignment。 2.列表框不适合窗口大小3.列表框位于笔记本标签内。 我想当列表框中的项目被选中要做的一些处理(一些函数调用)时,当前的标签显示被隐藏,并且新的标签显示结果和后退button。 当按下“返回”button时,它在1个选项卡中为2个选项卡执行2种情况 – 它仅显示选项卡2中的以前的内容,它将再次处理,并以原始格式在列表框中显示结果。

我的代码如下

#include <gtk/gtk.h> #include <glib.h> #include <stdlib.h> static void destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); GtkWidget *notebook = gtk_notebook_new(); gtk_container_add(GTK_CONTAINER(window), notebook); int count; int i; gchar *text; for (count = 1; count <= 5; count++) { GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); text = g_strdup_printf("Page %d", count); GtkWidget *label = gtk_label_new(text); GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(vbox), scrolledwindow); //GtkWidget *textview = gtk_text_view_new(); GtkWidget *listbox = gtk_list_box_new(); for (i=1; i<100; i++) { gchar *name = g_strdup_printf("Label %i", i); GtkWidget *label = gtk_label_new(name); gtk_container_add(GTK_CONTAINER(listbox), label); } gtk_container_add(GTK_CONTAINER(scrolledwindow), listbox); gtk_container_add(GTK_CONTAINER(vbox), scrolledwindow); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label); } gtk_widget_show_all(window); gtk_main(); return 0; } 

回答1和2是关于对齐和扩展属性。

  1. 您可以在使用gtk_box_pack_*函数集添加容器的同时设置展开属性,例如, gtk_box_pack_start
  2. 您可以使用gtk_widget_set_haligngtk_widget_set_valign函数设置对齐方式

将这些应用于您的代码:

 #include <gtk/gtk.h> #include <glib.h> #include <stdlib.h> static void destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); GtkWidget *notebook = gtk_notebook_new(); gtk_container_add(GTK_CONTAINER(window), notebook); int count; int i; gchar *text; for (count = 1; count <= 5; count++) { GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); text = g_strdup_printf("Page %d", count); GtkWidget *label = gtk_label_new(text); GtkWidget *scrolledwindow = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start (GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0); GtkWidget *listbox = gtk_list_box_new(); for (i=1; i<100; i++) { gchar *name = g_strdup_printf("Label %i", i); GtkWidget *label = gtk_label_new(name); gtk_widget_set_halign (GTK_WIDGET(label), GTK_ALIGN_START); gtk_container_add(GTK_CONTAINER(listbox), label); } gtk_container_add(GTK_CONTAINER(scrolledwindow), listbox); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label); } gtk_widget_show_all(window); gtk_main(); return 0; } 

注意当将滚动窗口添加到容器时, gtk_box_pack_start将被设置为填充和展开。 同时检查在GTK_ALIGN_START设置的标签halign

结果应该是:

在这里输入图像说明

关于3)它太具体,不能真正理解你的目标。 您还应该分开问题,以便答案针对每个问题。