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

书中的GtkText 已弃用了,改用 GtkTextView 。 网络上就只有这个例子程序了,主要还是参考gtk3-demo例子和gtk3的API手册,其实就是记事本程序和办公软件的性质

《Gtk中的文本视图(GtkTexView Widget)》
https://www.cnblogs.com/xchsp/p/4322025.html

《GtkTextView widget》
https://zetcode.com/gui/gtk2/gtktextview/

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

/* the example on page 94 */#include <gtk/gtk.h>
/* 准备材料,自定义函数  *//*  comments注释  *//* 程序主体 */
int main( int argc, char *argv[] )
{GtkWidget *window;/* 声明变量window为构件gtkwidget */GtkWidget *view;GtkTextBuffer *buffer;GtkTextIter iter;/*  迭代器类型,注意iter前面是没有星号*的 */gtk_init (&argc, &argv);/* 初始化gtk */window = gtk_window_new (GTK_WINDOW_TOPLEVEL);/*  创建顶级窗口 */gtk_window_set_title (GTK_WINDOW (window), "昨日诗yesterday_verse");/*  为窗口顶部加上标题为昨日诗yesterday_verse  */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), 10);/*  简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为10像数  */view = gtk_text_view_new ();/*  创建文本显示构件 */buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));/*  创建缓冲区域,用来存储数据,并与构件view联系起来 */gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);/*  初始化缓冲区域 */gtk_text_buffer_insert (buffer, &iter, "\t昨日诗\n", -1);/*  创建一个新行并写入数据,\t表示TAB键4个空格,\n表示回车换行,-1表示数据的结尾 */gtk_text_buffer_insert (buffer, &iter, "昨日兮昨日,\n", -1);gtk_text_buffer_insert (buffer, &iter, "昨日何其好!\n", -1);gtk_text_buffer_insert (buffer, &iter, "昨日过去了,\n", -1);gtk_text_buffer_insert (buffer, &iter, "今日徒懊恼。\n", -1);gtk_text_buffer_insert (buffer, &iter, "世人但知悔昨日,\n", -1);gtk_text_buffer_insert (buffer, &iter, "不觉今日又过了。\n", -1);gtk_text_buffer_insert (buffer, &iter, "水去日日流,\n", -1);gtk_text_buffer_insert (buffer, &iter, "花落日日少,\n", -1);gtk_text_buffer_insert (buffer, &iter, "成事立业在今日,\n", -1);gtk_text_buffer_insert (buffer, &iter, "莫待明朝悔今朝。\n", -1);gtk_container_add (GTK_CONTAINER (window), view);/*  将构件view装主窗口容器 */gtk_widget_show_all (window);/*  显示构件窗口包括所有构件  */gtk_main ();/*  进入主循环,等待信号(鼠标键盘)输入  */return 0;
}
/* the example on page 942 */#include <gtk/gtk.h>
/* 准备材料,自定义函数  *//*  comments注释  *//* 程序主体 */
int main( int argc, char *argv[] )
{GtkWidget *window;/* 声明变量window为构件gtkwidget */GtkWidget *hbox;GtkTextTag *tag1;GtkTextTag *tag2;GtkTextTag *tag3;GtkTextTag *tag4;GtkTextTag *tag5;GtkWidget *view1;GtkWidget *view2;GtkWidget *view3;GtkTextBuffer *buffer1;GtkTextBuffer *buffer2;GtkTextBuffer *buffer3;GtkTextIter iter;/* 注意iter前面是没有星号*的 */gtk_init (&argc, &argv);/* 初始化gtk */window = gtk_window_new (GTK_WINDOW_TOPLEVEL);/*  创建顶级窗口 */gtk_window_set_title (GTK_WINDOW (window), "三日诗three_days_verse");/*  为窗口顶部加上标题为三日诗three_days_verse  */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), 10);/*  简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为100像数  */hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);/*  创建组合框  */gtk_container_add (GTK_CONTAINER (window), hbox);/*  将组合框装入窗口容器  */view1 = gtk_text_view_new ();/*  创建文本显示构件 */gtk_box_pack_start (GTK_BOX (hbox), view1, FALSE, FALSE, 10);/*  将框架装入组合框容器中,数字10表示构件view1的边缘与hbox的边缘为10像数  */buffer1 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view1));/*  创建缓冲区域,用来存储数据,并与构件view联系起来 */tag1 = gtk_text_buffer_create_tag (buffer1, NULL, "weight", PANGO_WEIGHT_BOLD, NULL);/*  创建格式标签tag1,意思是黑体 */tag2 = gtk_text_buffer_create_tag (buffer1, NULL, "scale", PANGO_SCALE_X_LARGE, NULL);/*  创建格式标签,意思是字体相对变大 */tag3 = gtk_text_buffer_create_tag (buffer1, NULL, "foreground", "red", NULL);/*  创建格式标签,意思是字体颜色为红色 */tag4 = gtk_text_buffer_create_tag (buffer1, NULL, "background", "gray", NULL);/*  创建格式标签,意思是背景为暗灰色 */tag5 = gtk_text_buffer_create_tag (buffer1, NULL, "underline", PANGO_UNDERLINE_SINGLE, NULL);/*  创建格式标签,意思是下划线 */gtk_text_buffer_get_iter_at_offset (buffer1, &iter, 0);/*  初始化缓冲区域 */gtk_text_buffer_insert_with_tags (buffer1, &iter, "昨日诗\n", -1, tag1, tag2, NULL);/*  创建一个新行并写入数据,格式为黑体和变大,-1表示数据的结尾,NULL表示格式项的结尾 */gtk_text_buffer_insert (buffer1, &iter, "昨日兮昨日,\n", -1);gtk_text_buffer_insert (buffer1, &iter, "昨日何其好!\n", -1);gtk_text_buffer_insert (buffer1, &iter, "昨日过去了,\n", -1);gtk_text_buffer_insert (buffer1, &iter, "今日徒懊恼。\n", -1);gtk_text_buffer_insert_with_tags (buffer1, &iter, "世人但知悔昨日,\n", -1, tag4, NULL);/*  创建一个新行并写入数据,格式为背景色为暗灰色,-1表示数据的结尾,NULL表示格式项的结尾 */gtk_text_buffer_insert_with_tags (buffer1, &iter, "不觉今日又过了。\n", -1, tag4, NULL);gtk_text_buffer_insert (buffer1, &iter, "水去日日流,\n", -1);gtk_text_buffer_insert (buffer1, &iter, "花落日日少,\n", -1);gtk_text_buffer_insert_with_tags (buffer1, &iter, "成事立业在今日,\n", -1, tag3, tag5, NULL);gtk_text_buffer_insert_with_tags (buffer1, &iter, "莫待明朝悔今朝。\n", -1, tag3, tag5, NULL);view2 = gtk_text_view_new ();gtk_box_pack_start (GTK_BOX (hbox), view2, FALSE, FALSE, 10);buffer2 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view2));tag1 = gtk_text_buffer_create_tag (buffer2, NULL, "weight", PANGO_WEIGHT_BOLD, NULL);tag2 = gtk_text_buffer_create_tag (buffer2, NULL, "scale", PANGO_SCALE_X_LARGE, NULL);tag3 = gtk_text_buffer_create_tag (buffer2, NULL, "foreground", "red", NULL);tag4 = gtk_text_buffer_create_tag (buffer2, NULL, "background", "gray", NULL);tag5 = gtk_text_buffer_create_tag (buffer2, NULL, "underline", PANGO_UNDERLINE_SINGLE, NULL);gtk_text_buffer_get_iter_at_offset (buffer2, &iter, 0);gtk_text_buffer_insert_with_tags (buffer2, &iter, "今日诗\n", -1, tag1, tag2, NULL);gtk_text_buffer_insert (buffer2, &iter, "今日复今日,\n", -1);gtk_text_buffer_insert (buffer2, &iter, "今日何其少!\n", -1);gtk_text_buffer_insert (buffer2, &iter, "今日又不为,\n", -1);gtk_text_buffer_insert (buffer2, &iter, "此事何时了。\n", -1);gtk_text_buffer_insert_with_tags (buffer2, &iter, "人生百年几今日,\n", -1, tag4, NULL);gtk_text_buffer_insert_with_tags (buffer2, &iter, "今日不为真可惜!\n", -1, tag4, NULL);gtk_text_buffer_insert (buffer2, &iter, "若言姑待明朝至,\n", -1);gtk_text_buffer_insert (buffer2, &iter, "明朝又有明朝事。\n", -1);gtk_text_buffer_insert_with_tags (buffer2, &iter, "为君聊赋今日诗,\n", -1, tag3, tag5, NULL);gtk_text_buffer_insert_with_tags (buffer2, &iter, "努力请从今日始。\n", -1, tag3, tag5, NULL);view3 = gtk_text_view_new ();gtk_box_pack_start (GTK_BOX (hbox), view3, FALSE, FALSE, 10);buffer3 = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view3));tag1 = gtk_text_buffer_create_tag (buffer3, NULL, "weight", PANGO_WEIGHT_BOLD, NULL);tag2 = gtk_text_buffer_create_tag (buffer3, NULL, "scale", PANGO_SCALE_X_LARGE, NULL);tag3 = gtk_text_buffer_create_tag (buffer3, NULL, "foreground", "red", NULL);tag4 = gtk_text_buffer_create_tag (buffer3, NULL, "background", "gray", NULL);tag5 = gtk_text_buffer_create_tag (buffer3, NULL, "underline", PANGO_UNDERLINE_SINGLE, NULL);gtk_text_buffer_get_iter_at_offset (buffer3, &iter, 0);gtk_text_buffer_insert_with_tags (buffer3, &iter, "明日诗\n", -1, tag1, tag2, NULL);gtk_text_buffer_insert (buffer3, &iter, "明日复明日,\n", -1);gtk_text_buffer_insert (buffer3, &iter, "明日何其多!\n", -1);gtk_text_buffer_insert (buffer3, &iter, "我生待明日,\n", -1);gtk_text_buffer_insert (buffer3, &iter, "万事成蹉跎。\n", -1);gtk_text_buffer_insert_with_tags (buffer3, &iter, "世人皆被明日累,\n", -1, tag4, NULL);gtk_text_buffer_insert_with_tags (buffer3, &iter, "春去秋来老将至。\n", -1, tag4, NULL);gtk_text_buffer_insert (buffer3, &iter, "朝看水去流,\n", -1);gtk_text_buffer_insert (buffer3, &iter, "暮看日西坠,\n", -1);gtk_text_buffer_insert_with_tags (buffer3, &iter, "百年明日能几何?\n", -1, tag3, tag5, NULL);gtk_text_buffer_insert_with_tags (buffer3, &iter, "请君听我明日歌。\n", -1, tag3, tag5, NULL);gtk_widget_show_all (window);/*  显示构件窗口包括所有构件  */gtk_main ();/*  进入主循环,等待信号(鼠标键盘)输入  */return 0;
}

效果图如下

第94页的gtk+编程例子——正文构件相关推荐

  1. 第77页的gtk+编程例子——像元图

    以下gtk+编程例子是来自书籍<实用技术:开发Linux应用--用GTK+和GDK开发Linux图形用户界面应用>第77页的内容--像元图 书中的 GtkPixmap 自从gtk+2.0 ...

  2. 第69页的gtk+编程例子——工具提示

    以下gtk+编程例子是来自书籍<实用技术:开发Linux应用--用GTK+和GDK开发Linux图形用户界面应用>第69页的内容--工具提示,当鼠标停留在某个构件上几秒就会出现文字提示,书 ...

  3. GTK+编程入门(2)—GTK+程序结构

    GTK+编程入门(2)-GTK+程序结构(2015-7-23) 分类:GTK+   现在是晚上,快到睡觉时间了.把这小节完整看完是不可能了,索性就先开个头.这节的内容是通过一个最简单的GTK+程序的分 ...

  4. 计算机毕业论文里的编程,计算机编程毕业论文正文

    计算机编程毕业论文正文 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 摘要 II第1章引言 1第2章网络管理软件的分析 22.1总 ...

  5. linux raw socket 例子,raw socket编程例子

    raw socket编程例子内容安排: 1.原始套接字介绍 1.1 原始套接字工作原理与规则 1.2 简单应用 2 FTP密码窃取器实现(简单的rootkit) 2.1 设计思路 2.2 实现 2.3 ...

  6. VIM打造GTK编程环境

    2019独角兽企业重金招聘Python工程师标准>>> VIM打造GTK编程环境 概要 本文主要介绍了使用VIM的GTK和C/C++的智能提示,GTK和C/C++同时语法高亮, C/ ...

  7. python的函数式编程实例_函数式编程例子

    函数式编程例子 [篇一:函数式编程例子] 在 08 年的时候 ( 这经历记忆犹新 ) 我也跟 lz 一样,翻了好多文章, google 了好几个星期,最后我知道它 是这么个东西: ul li 它是函数 ...

  8. 使用C语言gtk编程一个贪吃蛇游戏设计与实现

    使用C语言以及gtk编程设计一个贪吃蛇游戏. 功能需求: (1)窗口界面设计:创建各种窗口和按钮标签等: (2)小蛇移动控制:按键盘上的上下左右键控制小蛇上下左右移动: (3)游戏进程控制:若小蛇碰到 ...

  9. GTK+编程入门(1)—简介与glib库

    GTK+编程入门(1)-简介与glib库(2015-7-23) 分类:GTK+ 一:GTK+简介   GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序.G ...

  10. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!

    导言:在大家正式学习编程之前,小编建议,一定要有学习编程的兴趣,不管你是怎么样,因为什么原因来接触的编程,一定要有兴趣,或者说是支撑你努力学习下去的欲望.因为编程的话你如果对他没有兴趣的话,你就会在越 ...

最新文章

  1. Access violation at address 0x77f96c94
  2. wsl安装配置vscode(亲测有用)
  3. Day 11: AeroGear 推送服务器:使应用的通知推送变得简单
  4. java监听器用法(二):窗口监听器
  5. numpy中newaxis的用法
  6. 洛谷1967货车运输
  7. Spark配置参数详解
  8. Python资料分享来袭,收下不谢!
  9. 物联网火爆,入门却太难了!
  10. 互联网日报 | 6月18日 星期五 | 百度与极狐发布量产共享无人车;奈雪的茶预计6月30日登陆港交所;阿里云盘上线PC版...
  11. 我是如何在六个月内学会 Python 的?
  12. GhostNet 详解
  13. 小程序超过2M限制的方法——分包加载
  14. 解决浏览器打开就是被篡改的桔梗网界面
  15. 一位仁兄对于项目管理的精辟见解
  16. 第025篇:诚意回归CSDN博客之旅(内含SPM惊喜消息)
  17. 程序员机械键盘选购总结:键盘选的好,Bug一定少
  18. AutoCAD2014下载和安装教程(官方中文完整版)
  19. Unifying Voxel-based Representation with Transformer for 3D Object Detection (UVTR)论文笔记
  20. 【K8S实战】-超详细教程(二)

热门文章

  1. Python-计算三角形边长和面积
  2. directadmin php-fpm,Directadmin + Nginx + php fpm + location:找不到文件
  3. 数列求和-加强版(C语言)
  4. 网站建设中百度快照劫持是什么?劫持百度快照是怎么回事?
  5. 微信公众号接入百度机器人
  6. Graphics.DrawString 方法
  7. php 中 normdist,说明 Excel 中的 NORMDIST 函数
  8. CentOS 7 配置Ruby语言开发环境
  9. 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
  10. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE