• 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"信号

    样例代码例如以下:
    #include <gtk/gtk.h>
    
    
    void deal_switch_page(GtkNotebook *notebook, gpointer page, guint page_num, gpointer data)
    {
            printf("我是第%d个页面
    ", 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;
    }
    

    执行结果:



  • 相关阅读:
    Android Studio使用笔记
    Android Material Design之在RecyclerView中嵌套CardView实现
    RR 和RC 幻读问题
    mysql rr和rc区别
    7.2 Database Backup Methods 数据备份方法:
    7.1 Backup and Recovery Types 备份和恢复类型
    Chapter 7 Backup and Recovery 备份和恢复:
    mysqldump 一些参数体验
    (?m) 可以让.去匹配换行
    perl 正则前导字符
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7110063.html
Copyright © 2020-2023  润新知