GTK常用控件之笔记本控件( GtkNotebook )

笔记本控件,可以让用户标签式地切换多个界面。当我们需要多窗口切换时,使用笔记本控件是一个明智的选择。



笔记本控件的创建:

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:要添加页面的标题名
返回值:成功返回值页面值(从0开始),失败返回-1

在指定位置添加页面(从0开始):
gint gtk_notebook_insert_page(
GtkNotebook *notebook,
GtkWidget *child, 
GtkWidget *tab_label,
gint position );

notebook: 容纳别的控件的笔记本
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"信号

例子代码如下:
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <gtk/gtk.h>  
  2.    
  3. // "switch-page"信号处理函数,page_num指第几个页面,从0开始  
  4. void deal_switch_pape(GtkNotebook *notebook, gpointer page,  
  5.                 guint page_num, gpointer user_data)  
  6. {  
  7.     printf("我是第%d个页面\n", page_num+1);  
  8. }  
  9.    
  10. int main( int argc, char *argv[] )   
  11. {   
  12.     gtk_init (&argc, &argv);    // 初始化  
  13.        
  14.     GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 创建主窗口  
  15.     gtk_widget_set_size_request(window, 400, 300);  //设置窗口大小  
  16.        
  17.     GtkWidget *notebook = gtk_notebook_new();   // 创建笔记本控件  
  18.     gtk_container_add(GTK_CONTAINER(window), notebook); // 笔记本放进窗口  
  19.   
  20.     // 页标签的位置,可以有四种位置:上、下、左或右。  
  21.     gtk_notebook_set_tab_pos(GTK_NOTEBOOK (notebook), GTK_POS_TOP);  //上面  
  22.   
  23.   
  24.     // 第一个页面  
  25.     GtkWidget *label = gtk_label_new("Page one");   //创建标签  
  26.     GtkWidget *box = gtk_hbox_new(TRUE, 5); // 创建布局  
  27.     GtkWidget *button_one = gtk_button_new_with_label("我是第一个页面");  
  28.     GtkWidget *button_two = gtk_button_new_with_label("我是第一个页面的按钮");  
  29.     gtk_container_add(GTK_CONTAINER(box), button_one);  
  30.     gtk_container_add(GTK_CONTAINER(box), button_two);  
  31.   
  32.     /* gtk_notebook_append_page( GtkNotebook *notebook, GtkWidget *child,  
  33.      *                     GtkWidget  *tab_label ); 
  34.      * 插入页面到笔记本的后端(append)或前端(prepend)来添加页面。 
  35.      * child是放在笔记本页面里的子控件,它必须另外创建,一般是容器 
  36.      * tab_label是要添加的页面的标签。 
  37.      */  
  38.     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label);   
  39.   
  40.     // 第二个页面  
  41.     label = gtk_label_new("Page two");  //创建标签  
  42.     box = gtk_hbox_new(TRUE, 5);    // 创建布局  
  43.     button_one = gtk_button_new_with_label("我是第二个页面");  
  44.     button_two = gtk_button_new_with_label("我是第二个页面的按钮");  
  45.     gtk_container_add(GTK_CONTAINER(box), button_one);  
  46.     gtk_container_add(GTK_CONTAINER(box), button_two);  
  47.     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label);   
  48.   
  49.     // 第三个页面,在指定位置添加页面,从0开始  
  50.     button_one = gtk_button_new_with_label("我是通过insert_page实现的,第三个页面");  
  51.     label = gtk_label_new("Page three");   
  52.     gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), button_one, label, 2);   
  53.       
  54.     // 处理信号,当切换页面时,会触发"switch-page"信号  
  55.     g_signal_connect(notebook, "switch-page",  
  56.                     G_CALLBACK(deal_switch_pape), NULL);  
  57.       
  58.     gtk_widget_show_all(window); //显示所有控件  
  59.   
  60.     // 设置起始页(第2页),从0开始算,相当于设置第2个页面显示  
  61.     gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1);   
  62.        
  63.     gtk_main();         // 主事件循环  
  64.        
  65.     return 0;   
  66. }   

程序运行效果图如下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值