我在gtk中为listbox编写了一个代码 问题 1.列表框的内容显示在水平线的中间。我希望它保持对齐。 2.列表框不符合窗口大小 3.列表框位于笔记本选项卡中。我想在选择列表框中的项目时进行一些处理(某个函数调用),隐藏当前选项卡显示,并显示带有结果和后退按钮的新选项卡。按下后退按钮时,2个选项卡会出现2种情况 在1个标签中 - 它只显示以前的内容 在标签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;
}
答案 0 :(得分:2)
回答1和2关于对齐和扩展属性的全部内容。
gtk_box_pack_*
一组功能添加到容器时设置展开属性,例如gtk_box_pack_start
。gtk_widget_set_halign
和gtk_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)它太具体了,无法真正理解你的目标。 您还应该分开问题,以便答案特定于每个问题。