笔记本控件,能够让用户标签式地切换多个界面。

当我们须要多窗体切换时,使用笔记本控件是一个明智的选择。

笔记本控件的创建:

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个页面\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;
}

执行结果:




GTK经常使用控件之笔记本控件( GtkNotebook )的更多相关文章

  1. WinForm用户控件、动态创建添加控件、timer控件--2016年12月12日

    好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3       0 0     用户控件: 通过布局将多个控件整合为一个控件,根据自己的需要进行修改,可对用户控件内的所有控件及控件属性进行修 ...

  2. DevExpress控件的GridControl控件小结

    DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...

  3. 【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

    目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET.BMap.NET.WindowsForm以及BMap.NET.WinformDemo. BMap.NET 对百度地 ...

  4. winfrom获取用户控件里的控件对象

    如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...

  5. MFC编程入门之二十七(常用控件:图片控件PictureControl)

    上一节讲的是滚动条控件,本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到的静态文本框都是 ...

  6. 学习笔记找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID.

    解决 找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID. private void DisplayHotBooks()    {        //获取 ...

  7. WPF学习之路(十二)控件(HeaderedContent控件)

    GroupBox 用来组织多种控件的常见控件,因为是内容空间,只能直接包含一项,需要使用面板一类的中间空间. Header和Content可以是任意元素 <GroupBox> <Gr ...

  8. ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用

    在用户控件中,获取父页面的方法 1:方法没有参数(userInfor()) string userInfor = Convert.ToString(this.Page.GetType().GetMet ...

  9. c#winform如何通过控件名查找控件

    //根据控件名称查找控件 //作用根据控件的配置项目, Control[] myfindcs = this.Controls.Find("button4", true); if ( ...

随机推荐

  1. Linux下如何从mysql数据库里导出导入数据

    https://blog.csdn.net/u012884402/article/details/47337701 一. 表的导入 1.进入数据库 mysql 数据库名 2.​查看表 show tab ...

  2. caffe2:conda路径和权限问题

    在使用conda之后,总是不能直接使用 conda install 命令,需要把codna添加到系统路径,取代默认Python. 在-/.bashrc中,添加 # added by Anaconda2 ...

  3. token机制完成登录状态保持/身份认证

    一般APP都是刚安装后,第一次启动时需要登录(提示你需要登录或者直接启动在登录界面).而只要登录成功后,以后每次启动时都是登录状态,不需要每次启动时再次登录.不过,也有些APP若你长期未启动,再次启动 ...

  4. RabbitMQ系列(三)--Java API

    基于java使用RabbitMQ 框架:SpringBoot1.5.14.RELEASE maven依赖: <dependency> <groupId>com.rabbitmq ...

  5. if语句,while语句,do whlie语句,循环语句

    总结: 1.定义数组并赋值: var arr=[1,2,3,4]; 2.通过下标访问数组: var str=arr[0]; 3.自定义数组 var arr=new Array(); 4.数组的赋值 a ...

  6. 09C语言指针

    C语言指针 地址 地址就是数据元素在内存中的位置表示: &变量名 #include <stdio.h> int main(){ int aa; unsigned int bb = ...

  7. go new() 和 make() 的区别

    看起来二者没有什么区别,都在堆上分配内存,但是它们的行为不同,适用于不同的类型. new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 ...

  8. (C/C++学习)14.C语言字符串处理函数(二)

    说明:上节着重解释了字符串处理的库函数处理,这节将针对一些常用的需求,进行非库函数的处理. 一.去除某一个字符串中的某个字符 1.去除字符串右边的空格 void trimStrRightSpace(c ...

  9. Ubuntu安装Foxit PDF阅读器

    最近使用Ubuntu自带的PDF阅读器,发现使用体验较差,打算安装FoxitReader(可能是我习惯了Foxit和Adobe) Foxit官网 对系统平台要求如下:(支持Linux) 继续摸索了一下 ...

  10. zabbix+docker

    由于公司线上服务器数量太少,又要用于生产,领导让上zabbix,但熟知zabbix搭建需要LAMP或者LNMP,如果和生产服务器混搭的话,不方便管理,也怕出问题,所以就先使用docker方式搭建管理. ...