这次网络管理工具的编写主要使用GTK作为画图工具;在这里回顾一下其中用到的tree_view构件

GtkTreeView 构件是一个高级的构件,利用他可以制作出漂亮的普通列表或者是树状的列表;这个构件里可以包含一或者多行

在GtktreeView构件中还有着其他几个独立的对象结构(objects)。其中 GtkCellRenderer 决定了在GtkTreeViewColumn中的数据究竟是如何来进行显示呈现的。GtkListStore 和 GtkTreeStore 的功能为体现模型(model)的作用。也就是说他们是用来处理和分析将要在GtkTreeView显示的数据的。 GtkTreeIter 则是一个数据结构被用于在GtkTreeView构件中,对行中的数据进行操作。 GtkTreeSelection 则是用来处理选项的。

下边是我这次项目中所写的的部分关于tree_view的代码:

struct process * curproc ;   //一个存放数据的结构体static int net_flow_add_status(NTApplet *applet)
{curproc=processes;  gtk_list_store_clear(applet->list_store); //清空list_storewhile(curproc != NULL){if(curproc->pid != -1 ){gtk_list_store_append(applet->list_store,&applet->tree_iter);  //添加一行list_store;applet->tree_iter,GtkTreeIter 则是一个数据结构被用于在GtkTreeView构件中,对行中的数据进行操作gtk_list_store_set (applet->list_store, &applet->tree_iter, 0, "gtk-cdrom", 1, curproc->name,2,curproc->pid,3,uid2username(curproc->uid), 4,format_show(0,curproc->sent_sec),5,format_show(0,curproc->rcvd_sec),-1, 6,format_show(1,curproc->rcvd_total),7,format_show(1,curproc->sent_total));//设置数据}curproc = curproc->next;}return TRUE;
}static void net_flow_update_status(NTApplet *applet)
{g_timeout_add (1000, (GSourceFunc)net_flow_add_status,applet);        //定时器,每过一秒更新一次数据}static void net_state_init (NTApplet *applet)
{GtkWidget *sw;GtkWidget *tree_view;                     //treeview 控件GtkTreeViewColumn *column;                //一个tree_view 包含多个列GtkCellRenderer *cell_renderer;                //一个column 可以有多个数据组合方式GtkTreeSelection *selection;if(applet->net_flow_update_flag)            //此程序只需要初始化一次;{gtk_widget_show_all(applet->vbox_state);return;}applet->vbox_state = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);sw = gtk_scrolled_window_new(NULL, NULL);        //创建窗口滚动条构件gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);//设置滚动条出现的方式gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN);        //applet->list_store = gtk_list_store_new(8, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING);        //new一个list_store并设置list_store属性(个人觉着这个是对tree_view中有几列数据的初始化)        tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (applet->list_store));//创建tree_view模型;gtk_box_pack_start (GTK_BOX (applet->vbox_current), applet->vbox_state, TRUE, TRUE, 0);gtk_widget_show(applet->vbox_state);gtk_box_pack_start (GTK_BOX (applet->vbox_state), sw, TRUE, TRUE, 0);gtk_widget_show(sw);gtk_container_add (GTK_CONTAINER(sw), tree_view);gtk_widget_show(tree_view);
//第一列column = gtk_tree_view_column_new();        //初始化第一列gtk_tree_view_column_set_title(column,"应用程序");gtk_tree_view_column_set_resizable(column,TRUE);gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 70);gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view),column);    //摆放到tree_view上cell_renderer = gtk_cell_renderer_pixbuf_new();            //第一列中下边所存放的数据gtk_tree_view_column_pack_start(column,cell_renderer,TRUE);    //摆放到第一列上gtk_tree_view_column_set_attributes(column,cell_renderer,"stock-id", 0, NULL);//设置数据属性cell_renderer = gtk_cell_renderer_text_new();            //第一列中下边所存放的第二个数据gtk_tree_view_column_pack_start(column,cell_renderer,TRUE);gtk_tree_view_column_set_attributes(column,cell_renderer,"text",1,NULL);//第二列column = gtk_tree_view_column_new ();gtk_tree_view_column_set_title (column, "进程ID");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 70);gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);cell_renderer = gtk_cell_renderer_text_new ();gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);gtk_tree_view_column_set_attributes (column, cell_renderer,"text", 2, NULL);//第三列column = gtk_tree_view_column_new();                                                                     gtk_tree_view_column_set_title (column, "用户名");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 70);gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);cell_renderer = gtk_cell_renderer_text_new ();gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);gtk_tree_view_column_set_attributes (column, cell_renderer, "text", 3,NULL);//第四列column = gtk_tree_view_column_new();gtk_tree_view_column_set_title (column, "下载速度");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 70);gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);cell_renderer = gtk_cell_renderer_text_new();gtk_tree_view_column_pack_start (column,cell_renderer, TRUE);gtk_tree_view_column_set_attributes(column, cell_renderer, "text", 4,NULL);//第五列column = gtk_tree_view_column_new();gtk_tree_view_column_set_title (column, "上传速度");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 70);gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);cell_renderer = gtk_cell_renderer_text_new();gtk_tree_view_column_pack_start (column,cell_renderer, TRUE);gtk_tree_view_column_set_attributes(column, cell_renderer, "text", 5,NULL);//第六列column = gtk_tree_view_column_new();gtk_tree_view_column_set_title (column, "已下载流量");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 100);gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);cell_renderer = gtk_cell_renderer_text_new();gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 100);gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);cell_renderer = gtk_cell_renderer_text_new();gtk_tree_view_column_pack_start (column,cell_renderer, TRUE);gtk_tree_view_column_set_attributes(column, cell_renderer, "text", 6,NULL);//第七列column = gtk_tree_view_column_new();gtk_tree_view_column_set_title (column, "已上传流量");gtk_tree_view_column_set_resizable (column, TRUE);gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED);gtk_tree_view_column_set_fixed_width (column, 100);gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);cell_renderer = gtk_cell_renderer_text_new();gtk_tree_view_column_pack_start (column,cell_renderer, TRUE);gtk_tree_view_column_set_attributes(column, cell_renderer, "text", 7,g_thread_new("updatedata",(GThreadFunc)net_flow_update_status, applet);//创建一个线程用于实时更新数据applet->net_flow_update_flag=1;//标志位,使得此tree_view只初始化一次gtk_widget_show_all(applet->vbox_state);
}applet为我们所定义的一个结构体指针,考虑到list_store里数据需要在后台实时更新,所以采用开辟线程的方式;

GTK构件 tree_view相关推荐

  1. GTK构件 --- 文本视图控件GTKtextview

    GTK构件 - 文本视图控件GTKtextview   文本视图控件(GtkTextView)是用以取代原有的文本编辑(GtkText)控件的,它包括一个文本缓冲区(GtkTextBuffer),用来 ...

  2. (三)、一步一步学GTK+之布局

    本来想接上篇把关于窗口方面的写的更详尽一点,但因为我做软件的习惯来说还暂时用不不到.我们先跳过,然后先说说窗口中的布局.跟大多数软件界面一样,一般包含标题栏.菜单栏.工具栏.状态栏和工作区等. 首先, ...

  3. Linux下基于GTK人脸识别界面设计

    Linux下基于GTK人脸识别界面设计 1.人脸识别简介   人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸, ...

  4. 使用Glade和libGlade设计Gtk+图形界面

    张威.曹剑 Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求. 一.Glade简介 如果有一种软件能将图形 ...

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

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

  6. 远程管理linux系统工具,远程管理Linux系统工具的设计与实现Linux013

    一种远程管理Linux系统工具的设计与实现 摘  要 现在,Linux已经是应用比较广泛的操作系统之一,在其系统中有很多的服务.为了实现远程配置和管理Linux中的各种服务,需要有一种远程管理Linu ...

  7. DIY一个高大上带提醒的计时器,简单实用,你还在等什么

    小编心语:锵锵锵!小编我又来了!昨天发了一篇比较实用的<Python聊天室>,鉴于反响还不错,SO ,小编也想给大家多分享点有用的干货,让大家边学边用.好了,闲话不多说,今天要给各位看官们 ...

  8. 嵌入式成长轨迹23 【Linux应用编程强化】【Linux下的C编程 下】【Linux GUI编程】...

    一   GTK+/Gnome开发简介 GTK+是一个用于创建图形用户界面(GUI)的图形库,它在功能上类似微软的MFC,为应用程序提供了一套与平台无关的图形用户接口.GTK+最初用于开发GIMP(Ge ...

  9. GNOME API 参考

    GitHub:https://github.com/GNOME https://developer.gnome.org/references 目录 API 参考 核心库 核心 用户界面 多媒体 交流 ...

最新文章

  1. 这些Java8官方挖的坑,你踩过几个?
  2. 力扣--盛水最多的容器
  3. Faster R-CNN理解、讨论
  4. 趣学python3(8)-循环语句(2)
  5. mysql client centos_centos7 安装mysql和mysqlclient遇到的那些坑
  6. DataView数据视图的使用 winform
  7. Asp.net MVC 3 Framework: SportsStore源码
  8. java -D參数简化增加多个jar【简化设置classpath】
  9. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(一)
  10. MySQL数据库MyISAM与InnoDB存储引擎的比较
  11. 天正双击墙体不能编辑_20个天正CAD常备技巧,助你神速绘图!
  12. 乐视云盘电脑版 V3.1.0 官方最新版
  13. 鬼谷八荒先天气运修改器
  14. c语言sql数据库大作业,c语言连接sql数据库.docx
  15. android bks证书生成方式
  16. 路普达-区块链技术的本质与未来应用趋势
  17. 安卓APP的字体大小设置不受系统字体大小的影响
  18. IoT黑板报0210:Google 发布 Android Things 开发者第二预览版
  19. 大专毕业的我,用了6年拿到年薪50W
  20. 【Oracle】CBO优化详解

热门文章

  1. 网易云信 IM 推送保障及网络优化实践
  2. pgsql 日期转换
  3. 【python】使用py3-bencode打开torrent文件
  4. 安装mysq的时候执行mysqld --initialize --console时候报错:can not create directory data文件夹需要把分隔符改成反方向
  5. mysql ctrl+y_mysql操作
  6. Android 系统应用开发实战
  7. java 开发平台 普元_普元开发平台好不好?
  8. OSG学习:OSG组成(二)——渲染状态和纹理映射
  9. 手工植锡、焊接BGA芯片
  10. 计算机打不开 显示正在处理它,Win10系统打开此电脑显示正在处理它的解决方法...