gpt4 book ai didi

linux - gtk-listbox - 内容显示在水平线的中间,列表框不适合窗口大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:33 27 4
gpt4 key购买 nike

我在 gtk 中为列表框写了一个代码问题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;
}

最佳答案

回答 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

结果应该是:

enter image description here

关于 3) 它过于具体,无法真正理解您的目标。您还应该将问题分开,以便每个问题的答案都是特定的。

关于linux - gtk-listbox - 内容显示在水平线的中间,列表框不适合窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com