如何在 GTK+ 2 中将 GtkButton 引用到 GtkNotebook 的多个页面
How to make a GtkButton be referred to multiple pages of GtkNotebook in GTK+ 2
感谢您的提前帮助。
我做了一个按钮来引用笔记本的多个页面。所以我写了一些代码如下,但它没有像我预期的那样工作。
预期:每个页面中都会显示一个标记为 "Next page" 的按钮。如果我单击它,那么 window 会显示下一页。
我应该制作四个按钮附加到每个页面吗?但如果可以的话,我只想使用一个按钮来完成这项任务。
GtkWidget *notebook;
static GtkWidget*
init_notebook_widgets (void)
/* Return: GtkNotebook pointer */
{
GtkWidget *page1, *page2, *page3, *page4, \
*label1, *label2, *label3, *label4, \
*next_button;
notebook = gtk_notebook_new ();
next_button = gtk_button_new_with_mnemonic ("_Next page");
g_signal_connect (G_OBJECT (next_button), "clicked",
G_CALLBACK (go_next_page), NULL);
page1 = gtk_vbox_new (TRUE, 5);
label1 = gtk_label_new ("This is first page!");
gtk_box_pack_start_defaults (GTK_BOX (page1), label1);
gtk_box_pack_start_defaults (GTK_BOX (page1), next_button);
page2 = gtk_vbox_new (TRUE, 5);
label2 = gtk_label_new ("This is second page!");
gtk_box_pack_start_defaults (GTK_BOX (page2), label2);
gtk_box_pack_start_defaults (GTK_BOX (page2), next_button);
page3 = gtk_vbox_new (TRUE, 5);
label3 = gtk_label_new ("This is third page!");
gtk_box_pack_start_defaults (GTK_BOX (page3), label3);
gtk_box_pack_start_defaults (GTK_BOX (page3), next_button);
page4 = gtk_vbox_new (TRUE, 5);
label4 = gtk_label_new ("This is fourth page!");
gtk_box_pack_start_defaults (GTK_BOX (page4), label4);
gtk_box_pack_start_defaults (GTK_BOX (page4), next_button);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page1,
gtk_label_new ("Page 1"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page2,
gtk_label_new ("Page 2"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page3,
gtk_label_new ("Page 3"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page4,
gtk_label_new ("Page 4"));
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_BOTTOM);
return notebook;
}
static void
go_next_page (GtkWidget *widget,
gpointer data)
{
gtk_notebook_next_page (GTK_NOTEBOOK (notebook));
}
一个gtkwidget 只能放在一个容器中。您应该为每个页面创建按钮(顺便说一句,它在最后一页上会有什么行为?)或创建一个按钮,但将其打包在笔记本之外(同样的问题适用)
并看看 GtkAssistant
感谢您的提前帮助。
我做了一个按钮来引用笔记本的多个页面。所以我写了一些代码如下,但它没有像我预期的那样工作。
预期:每个页面中都会显示一个标记为 "Next page" 的按钮。如果我单击它,那么 window 会显示下一页。
我应该制作四个按钮附加到每个页面吗?但如果可以的话,我只想使用一个按钮来完成这项任务。
GtkWidget *notebook;
static GtkWidget*
init_notebook_widgets (void)
/* Return: GtkNotebook pointer */
{
GtkWidget *page1, *page2, *page3, *page4, \
*label1, *label2, *label3, *label4, \
*next_button;
notebook = gtk_notebook_new ();
next_button = gtk_button_new_with_mnemonic ("_Next page");
g_signal_connect (G_OBJECT (next_button), "clicked",
G_CALLBACK (go_next_page), NULL);
page1 = gtk_vbox_new (TRUE, 5);
label1 = gtk_label_new ("This is first page!");
gtk_box_pack_start_defaults (GTK_BOX (page1), label1);
gtk_box_pack_start_defaults (GTK_BOX (page1), next_button);
page2 = gtk_vbox_new (TRUE, 5);
label2 = gtk_label_new ("This is second page!");
gtk_box_pack_start_defaults (GTK_BOX (page2), label2);
gtk_box_pack_start_defaults (GTK_BOX (page2), next_button);
page3 = gtk_vbox_new (TRUE, 5);
label3 = gtk_label_new ("This is third page!");
gtk_box_pack_start_defaults (GTK_BOX (page3), label3);
gtk_box_pack_start_defaults (GTK_BOX (page3), next_button);
page4 = gtk_vbox_new (TRUE, 5);
label4 = gtk_label_new ("This is fourth page!");
gtk_box_pack_start_defaults (GTK_BOX (page4), label4);
gtk_box_pack_start_defaults (GTK_BOX (page4), next_button);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page1,
gtk_label_new ("Page 1"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page2,
gtk_label_new ("Page 2"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page3,
gtk_label_new ("Page 3"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page4,
gtk_label_new ("Page 4"));
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_BOTTOM);
return notebook;
}
static void
go_next_page (GtkWidget *widget,
gpointer data)
{
gtk_notebook_next_page (GTK_NOTEBOOK (notebook));
}
一个gtkwidget 只能放在一个容器中。您应该为每个页面创建按钮(顺便说一句,它在最后一页上会有什么行为?)或创建一个按钮,但将其打包在笔记本之外(同样的问题适用)
并看看 GtkAssistant