GTK构件 tree_view
2015-12-30 11:20
162 查看
这次网络管理工具的编写主要使用GTK作为画图工具;在这里回顾一下其中用到的tree_view构件
GtkTreeView 构件是一个高级的构件,利用他可以制作出漂亮的普通列表或者是树状的列表;这个构件里可以包含一或者多行
在GtktreeView构件中还有着其他几个独立的对象结构(objects)。其中 GtkCellRenderer 决定了在GtkTreeViewColumn中的数据究竟是如何来进行显示呈现的。GtkListStore 和 GtkTreeStore 的功能为体现模型(model)的作用。也就是说他们是用来处理和分析将要在GtkTreeView显示的数据的。 GtkTreeIter 则是一个数据结构被用于在GtkTreeView构件中,对行中的数据进行操作。 GtkTreeSelection 则是用来处理选项的。
下边是我这次项目中所写的的部分关于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_store while(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("updatedat 4000 a",(GThreadFunc)net_flow_update_status, applet);//创建一个线程用于实时更新数据 applet->net_flow_update_flag=1;//标志位,使得此tree_view只初始化一次 gtk_widget_show_all(applet->vbox_state); } applet为我们所定义的一个结构体指针,考虑到list_store里数据需要在后台实时更新,所以采用开辟线程的方式;
相关文章推荐
- Centos搭建GTK+Codeblock完整版
- linux下的图形界面扫雷游戏(Gtk+2.0)
- gdk模拟鼠标按键事件/焦点事件
- GTK常规问题解答
- 【cocostudio】如何解决2.0版本打不开的问题
- 构建 C++ 开发环境包括 gtk、qt 等开发库
- PHP+Gtk实例(求24点)
- GtkMessageDialog
- centos6.2运行ibm install manager 报错libswt-pi-gtk-4234.so
- ubuntu -karmic Koala 下安装 VBox
- 限制entry控件的可COPY等操作
- 去掉标题栏显示
- Secure CRT 乱码 问题
- 学习的瓶颈
- 网络嗅探的原因
- 从源码编译安装软件经验 gtk
- GTK+的安装
- Ubuntu14.04上安装gtk
- CentOS 6.0中安装GTK+2.0
- [转载]mono几经改进,终支持WinForm开发