笔记本控件,能够让用户标签式地切换多个界面。
当我们须要多窗体切换时,使用笔记本控件是一个明智的选择。
笔记本控件的创建:
GtkWidget *gtk_notebook_new(void);
返回值:笔记本控件指针
设置页标签的位置:
void gtk_notebook_set_tab_pos( GtkNotebook *notebook,
GtkPositionType pos );
notebook:笔记本控件
pos取值例如以下:
GTK_POS_LEFT: 左
GTK_POS_RIGHT: 右
GTK_POS_TOP: 上
GTK_POS_BOTTOM: 下
追加页面:
gint gtk_notebook_append_page(
GtkNotebook *notebook,GtkWidget *child,GtkWidget *tab_label );
notebook: 容纳别的控件的笔记本
child: 放在笔记本页面里的子控件
tab_label:要加入页面的标题名
child: 放在笔记本页面里的子控件
tab_label:要加入页面的标题名
返回值:成功返回值页面值(从0開始)。失败返回-1
在指定位置加入页面(从0開始):
gint gtk_notebook_insert_page(
GtkNotebook *notebook,GtkWidget *child,GtkWidget *tab_label,gint position );
notebook: 容纳别的控件的笔记本
child: 放在笔记本页面里的子控件
tab_label:要加入页面的标题名
child: 放在笔记本页面里的子控件
tab_label:要加入页面的标题名
position:页面的位置。从0開始。假设-1代表加入到最后
返回值:成功返回值页面值(从0開始),失败返回-1
设置起始页,从0開始算,相当于设置第几个页面显示:
void gtk_notebook_set_current_page(GtkNotebook *notebook,gint page_num );
notebook:要设置的笔记本控件
page_num:页面数
经常使用信号:"switch-page"
当切换页面时,会触发"switch-page"信号
样例代码例如以下:
#include <gtk/gtk.h>
void deal_switch_page(GtkNotebook *notebook, gpointer page, guint page_num, gpointer data)
{
printf("我是第%d个页面\n", page_num+1);
return;
}
int main(int argc, char *argv[])
{
//1.gtk环境
gtk_init(&argc, &argv);
//2.创建一个window
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//设置窗体大小
gtk_widget_set_size_request(window, 400, 300);
//3.创建笔记本控件
GtkWidget *notebook = gtk_notebook_new();
gtk_container_add(GTK_CONTAINER(window), notebook);
//4.页标签的位置,能够有四种位置:上、下、左或右
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);//上面
//5.创建一个水平布局
GtkWidget *hbox = gtk_hbox_new(TRUE, 5);
gtk_container_add(GTK_CONTAINER(window), hbox);
//6.第一个页面
GtkWidget *label = gtk_label_new("Page one");
GtkWidget *button1 = gtk_button_new_with_label("我是第一个页面");
gtk_container_add(GTK_CONTAINER(hbox), button1);
GtkWidget *button2 = gtk_button_new_with_label("我是第一个页面的按钮");
gtk_container_add(GTK_CONTAINER(hbox), button2);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox, label);
//7.第二个页面
label = gtk_label_new("Page two");
hbox = gtk_hbox_new(TRUE, 5);
button1 = gtk_button_new_with_label("我是第二个页面");
gtk_container_add(GTK_CONTAINER(hbox), button1);
button2 = gtk_button_new_with_label("我是第二个页面的按钮");
gtk_container_add(GTK_CONTAINER(hbox), button2);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox, label);
//8.第三个页面,在指定位置加入页面,从0開始
label = gtk_label_new("page three");
button1 = gtk_button_new_with_label("我是通过insert_page实现的,第三页面");
gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), button1, label, 2);
//9.处理信号,当切换页面的时候,会触发“switch-page”信号
g_signal_connect(notebook, "switch-page", G_CALLBACK(deal_switch_page), NULL);
//10.设置默认起始页为第二页,从0開始算,那就是1
gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook),1);
//11.显示全部网页
gtk_widget_show_all(window);
//12.主事件循环
gtk_main();
return 0;
}
执行结果:
浙公网安备 33010602011771号