第80页的gtk+编程例子——工具条

以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第80页的内容——工具条

书中的gtk_toolbar_append_item、gtk_toolbar_append_element、gtk_toolbar_append_space函数已经不使用了,其实使用glade创建工具是更加方便,同时可以配合使用写代码的方法实现

主要是参考《一个gtk_stack,gtk_info_bar,gtk_header_bar,gtk_toolbar于一体的gtk窗口例子》https://blog.csdn.net/FlayHigherGT/article/details/84951931?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164607047516780271525345%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164607047516780271525345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-84951931.pc_search_insert_ulrmf&utm_term=gtk+toolbar&spm=1018.2226.3001.4187
《GTK学习3–菜单栏和工具栏》https://blog.csdn.net/hongbochen1223/article/details/84723365?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164607047516780271525345%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164607047516780271525345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-10-84723365.pc_search_insert_ulrmf&utm_term=gtk+toolbar&spm=1018.2226.3001.4187

ruhong@localhost:~/gtk> gtk3-demo &
[1] 7826
双击左边的Builder就会跳出一个窗口显示这个例子程序的运行效果,再回到刚才的主界面,单击右上方的demo.ui就能看到源代码了,用鼠标全选复制到新建的文本文件中,保存时以文件名为builder01.glade

用文件浏览器打开/usr/share/icons/gnome/32x32/actions/就可以看到许多图标,用glade打开builder01.glade单击左边GtkToolItem再单击中间新建图标,单边右边图标名称最右边的编辑图标,就跳出选择图标的对话框,筛选图标十分方便
在这里插入图片描述
ruhong@localhost:~/gtk> gtk3-icon-browser &
[1] 3346
运行gtk3-icon-browser就可以预览所有图标,除了左边的分类,还有上方的normal和symbolic标签,可以有更多图标可以选择,要使用它只需要输入图标的英文名称就行了,很方便的
在这里插入图片描述

在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page80.c -o page80 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page80

/* the example on page 80 */

#include <gtk/gtk.h>
/* 准备材料,自定义函数  */
	/*  comments注释  */

/* 程序主体 */
int main( int argc, char *argv[] )
{
	GtkWidget *window;
	/* 声明变量window为构件gtkwidget */
	GtkWidget *vbox;
	GtkWidget *toolbar;
	GtkWidget *newimage;
	GtkWidget *openimage;
	GtkWidget *saveimage;
	GtkWidget *saveasimage;
	GtkWidget *quitimage;
	GtkToolItem *new;
	/* 声明变量new为GtkToolItem类型 */
	GtkToolItem *open;
	GtkToolItem *save;
	GtkToolItem *saveas;
	GtkToolItem *quit;
	GtkToolItem *separator;
	GtkToolItem *copy;
	GtkToolItem *cut;
	GtkToolItem *paste;
	GtkToolItem *find;
	GtkToolItem *replace;
	GtkToolItem *helpf1;
	GtkToolItem *aboutf7;
	
	gtk_init (&argc, &argv);
	/* 初始化gtk */

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	/*  创建顶级窗口 */
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	/*  设置窗口位置为显示器的中间 */
	gtk_window_set_default_size(GTK_WINDOW(window), 1000, 200);
	/*  设置窗口的大小,横为1000像素,竖为200像素 */
	gtk_window_set_title (GTK_WINDOW (window), "测试toolbar");
	/*  为窗口顶部加上标题为测试toolbar  */
	g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
	/*  为窗口加上动作,当收到destroy信号,就启动gtk_main_quit事件,gtk_main_quit就是鼠标单击窗口右上角的关闭按钮就终止程序  */
	gtk_container_set_border_width (GTK_CONTAINER (window), 0);
	/*  简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为0像数  */
	
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	/*  创建组合框  */
	gtk_container_add (GTK_CONTAINER(window), vbox);
	/*  将组合框装入窗口容器  */
	
	toolbar = gtk_toolbar_new ();
	/*  创建工具条  */
	gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH); 
	/*  设置工具条要同时显示图标和文字  */
	gtk_box_pack_start (GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
	/*  将工具条装入组合框容器  */
	
	newimage = gtk_image_new_from_file ("/usr/share/icons/gnome/32x32/actions/document-new.png");
	/*  从文件读取图片  */
	new = gtk_tool_button_new (newimage, "新建");
	/*  创建工具条按钮,使用图片newimage和“新建”文字  */
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), new, -1);
	/*  将新建工具条按钮加入到工具条中,-1表示从后面加入  */
	
	openimage = gtk_image_new_from_file ("/usr/share/icons/gnome/32x32/actions/document-open.png");
	open = gtk_tool_button_new (openimage, "打开");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), open, -1);
	
	saveimage = gtk_image_new_from_file ("/usr/share/icons/gnome/32x32/actions/document-save.png");
	save = gtk_tool_button_new (saveimage, "保存");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), save, -1);
	
	saveasimage = gtk_image_new_from_file ("/usr/share/icons/gnome/32x32/actions/document-save-as.png");
	saveas = gtk_tool_button_new (saveasimage, "另存为");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), saveas, -1);
	
	quitimage = gtk_image_new_from_file ("/usr/share/icons/gnome/32x32/actions/application-exit.png");
	quit = gtk_tool_button_new (quitimage, "退出");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), quit, -1);

	separator = gtk_separator_tool_item_new ();
	/*  创建工具条分隔条  */
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), separator, -1);
	/*  将新建工具条分隔条加入到工具条中,-1表示从后面加入  */
	
	copy = gtk_tool_button_new (NULL, "复制");
	/*  创建工具条按钮,不使用图片,使用“复制”文字  */
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(copy), "edit-copy");
	/*  从系统自带图标库中指定edit-copy图片作为工具条按钮的图片  */
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), copy, -1);
	
	cut = gtk_tool_button_new (NULL, "剪切");
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(cut), "edit-cut");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), cut, -1);
	
	paste = gtk_tool_button_new (NULL, "粘贴");
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(paste), "edit-paste");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), paste, -1);
	
	find = gtk_tool_button_new (NULL, "查找");
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(find), "edit-find");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), find, -1);
	
	replace = gtk_tool_button_new (NULL, "替换");
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(replace), "edit-find-replace");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), replace, -1);

	separator = gtk_separator_tool_item_new ();
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), separator, -1);
	
	helpf1 = gtk_tool_button_new (NULL, NULL);
	/*  创建工具条按钮,不带有图片,不带有文字  */
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(helpf1), "gtk-help");
	/*  从系统自带图标库中指定gtk-help图片作为工具条按钮的图片  */
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), helpf1, -1);
	
	aboutf7 = gtk_tool_button_new (NULL, NULL);
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON(aboutf7), "gtk-about");
	gtk_toolbar_insert (GTK_TOOLBAR(toolbar), aboutf7, -1);
	
	
	gtk_widget_show_all (window);
	/*  显示构件窗口包括所有构件  */
	gtk_main ();
	/*  进入主循环,等待信号(鼠标键盘)输入  */
	return 0;
}

效果图如下

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值