Linux下的GTK图形界面编程_第1页
Linux下的GTK图形界面编程_第2页
Linux下的GTK图形界面编程_第3页
Linux下的GTK图形界面编程_第4页
Linux下的GTK图形界面编程_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux下的GTK图形界面编程Linux下的GTK图形界面编程 Linux下的GTK图形界面编程 信息技术论文 更新:2006-4-8 阅读: Linux下的GTK图形界面编程【摘要】本文介绍了Linux平台下的Xwindow图形窗口编程工具GTK,并给出了用GTK编程的根本要素和步骤。【关键词】GTK,回调函数,消息处理器,调节器GTK(GIMP Toolkit)是一个图形用户编程的接口工具。它注册完全免费,所以用来开发自由软件或商业软件都不需要花费什么。如今很多Linux集成系统都已经将GTK1.2版本打包进去了。包括RedHat Linux 6.0以上版本,还有中文化的Turbo Li

2、nux等等。它也越来越被普遍的应用于UNIX系统编程。还有一个组件叫Glib,它包含了一些标准应用的新扩展用来进步GTK的兼容性。用于Linux系统的某些函数可能不适宜标准的UNIX系统,例如g_strerror()函数等等。某些函数也扩展了GNUC的一般功能,例如g_malloc函数就有自己加强的调试功能。GTK可以与多种语言绑定,包括C+, Guile, Perl, Python, Ton, Ada95, Objective C, Free Pascal, Eiffel。用标准C开发的程序,编译软件可用GNU并附带上GTK选项即可。想用除了标准C以外的其它语言来开发Xwindow图形用户程

3、序,那么需要先参考一下有关绑定软件的内容 :/ 。 假设用C+语言来调用GTK进展开发,可以用已经和C+绑定的软件叫GTK-软件,来提供一个比GTK更好的C+编译环境。目前已经开发出来GTK的增强版GTK+。GTK+是将GTK,GDK,GLIB集成在一起的开发包,可以工作在许多类似于UNIX的系统上,没有GTK的平台限制。1GTK的消息处理机制下面我们先看一个根本的例子,该例子产生一个200×200像素的窗口。它不能自己退出,只能通过shell来杀死进程调用kill命令。/*例子 base.c */#include gtk/gtk.hint main( int argc

4、,char *argv )GtkWidget *window;gtk_init (argc, argv); /* 初始化显示环境 */window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* 创立一个新的窗口*/gtk_widget_show (window); /*显示窗口*/gtk_main (); /*进入睡眠状态,等待事件激活*/return(0);从上面的程序可以看出,GTK是一个事件驱开工具包,当它运行到gtk_main()函数时会自动睡眠,直到有事件发生,控制权转让给相应的函数调用,在该函数中可以用标准C写出相应的事物逻辑。这与windo

5、ws 上的程序处理是一样的。对窗口对象上发生的事件如按下鼠标,激活键盘等,GTK也有相应的消息信号产生。这时就需要程序员创立一个信号处理器来捕获该信号,并告诉GTK程序事件发生后调用哪个回调函数。信号处理器的创立函数定义如下:gint gtk_signal_connect( GtkObject *object, gchar *name,GtkSignalFunc callback_func, gpointer func_data );返回值是一个区分同一对象中的事件与不同回调函数的关联标签。这样可以做到一个对象的一个信号就有任意多个回调函数,并且每一个都会按照声明的顺序执行。函数调用的第一个参

6、数是产生信号的widget组件即按钮等窗口构件,而name那么是希望捕获的信号或事件的名称,callback_func那么是事件发生后所调用的回调函数名称,而第四个参数func_data那么是传递给回调函数的参数。回调函数要定义在主程序的前面,它们的一般格式都如下所示:void callback_func( GtkWidget *widget, gpointer func_data );调用下面这个方法将允许你将回调函数与事件的关联断开:void gtk_signal_disconnect( GtkObject *object, gint id );该函数的第二个参数就是上述gtk_signa

7、l_connect函数的返回值,即关联标签。第一个参数指向了去除关联的对象名称。这样可以做到断开事件与回调函数的关联,使得事件发生后,不会调用相关的回调函数。布局格式2.1打包盒子对GTK显示格式的控制是通常通过打包盒子来完成的。widget组件打包可以采用两种方式,程度盒子和垂直盒子。假设将widget组件打包进平行盒子,组件就被依次程度的插入窗口;假设是垂直盒子,那么组件排列是垂直的。产生新的程度盒子的函数为GtkWidget *gtk_hbox_new (gint homogeneous, gint spacing);参数homogeneous是用来控制是否盒子中的每个组件都有同样的大小

8、例如程度盒子中的控件有同样的宽度,垂直盒子中的控件有同样的高度。Spacing参数是组件之间的间隔。垂直盒子的创立函数是gtk_vbox_new,定义与程度盒子一致。gtk_box_pack_start()和gtk_box_pack_end()函数是用来将打包对象放入这些盒子中的。void gtk_box_pack_start( GtkBox *box, GtkWidget *child,gint expand, gint fill, gint padding );第一个参数是你将组件打进去的盒子指针,第二个参数是你将要打进去的组件指针。Expand参数是用来控制是否允许组件扩展至分配给盒子空

9、间的大小选TRUE,还是盒子的大小收缩到组件那么大选FALSE。函数中的fill参数是用来控制是否将多余的空间分配给组件,即将组件扩展到盒子的大小选TRUE,或者多余的空间不变,保存作为盒子和打包组件间的间隔。该参数只有在expand参数取TRUE时才有效。Padding参数是指组件四周与盒子的间隔大小。注意fill取FALSE值,expand取TRUE值时与expand取FALSE值,fill值无效的区别。前者的盒子仍是原来创立盒子时指定的大小,而后者的盒子已经缩小到打包组件的大小了。gtk_box_pack_end()函数的参数与上面描绘的一致。只是排列顺序分别是从下到上,从右到左。最后将

10、所有的盒子或组件打包到一个大盒子中,用gtk_container_add()函数将盒子参加窗口即可。2.2表格打包我们可以产生一个表格,将widget组件一一放入。Widget组件将占据所有分配给它的空间。创立表格是用下面的函数:GtkWidget *gtk_table_new( gint rows, gint columns,gint homogeneous );第一个参数,显而易见,是表格的行数。后面的参数那么是表格的列数。homogeneous参数那么是用来安排表格间隔大小。假设它取TRUE,那么表格中每个小格的大小用表格中最大组件的大小来设置的,所有的小格大小都是一样的。假设homog

11、eneous参数取FALSE的,每个小格的大小都用同行中最高组件的高度,同列中最宽组件的宽度。将一个widget组件放入一个表格,用下面的函数:void gtk_table_attach( GtkTable *table, GtkWidget *child, gint left_attach,gint right_attach, gint top_attach, gint bottom_attach,gint xoptions, gint yoptions, gint xpadding, gint ypadding );参数xoptions和yoptions是用来确定打包选项的,可以用OR来选

12、择多个选项。调节器 GTK有很多组件可以用鼠标或键盘来调整,例如范围组件Range Widget。还有一些组件在整个数据区域的一部分是可调整的,例如文本组件Text Widget和视口组件Viewport Widget。很明显,程序是要可以对可调整组件所产生的变化进展处理。一种解决方法是让可调整组件在释放自己的信号时,将调整数据值传递信号处理器。或者用另外一种解决方法将调整数据值放入一个数据构造,由程序访问该构造来获得改变的参数值。有时候你可能需要将几个可调整组件的调节相关联,调整一个也会导致另一个的变化。最明显的例子就是滚动条与文本编辑框组件的处理。假设这些相关联的组件分别有自己处理调整数据

13、的方法,那么程序员必须自己写一个信号处理器,将一个组件的调整数据转换成另一个组件的调整数据,并调用调整设置函数将该值设置进去。GTK调用了调节器成功的解决了这个问题。调节器不是组件,而是存储和传递调整数据的构造。最典型的调整器应用是存储配置参数和范围组件的值。不同的是调整器也是从对象Object继承而来的,它有许多不同于数据构造的特性。最重要的是,它也会释放信号,并且这些信号不仅可以被程序捕获来响应用户的调整和编辑,还可以在可调整组件中透明的传播调整数据。一般调节器会创立组件时自动创立。例如让文本组件和滚动条组件用同一个调节器如下所示:text = gtk_text_new (NULL, NU

14、LL);/* 将刚创立的调节器用于垂直滚动条 */vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)-vadj);调节器是从对象Object继承下来的。所以它与其它的组件对象一样,可以产生信号。当好几个组件共享一个调节器时,它们都会和一个信号处理器相关联。这个信号处理器是用来处理“value_changed信号的,跟程序中处理信号是一样。下面是在GtkAdjustmentClass构造中该信号的定义:void (* value_changed) (GtkAdjustment *adjustment);不同的可调整组件都用一个调节器时,任何一个组件发生

15、调整变化都会产生该信号。有两种情况会导致这个现象的发生。第一种情况是用户在用鼠标或键盘调整该组件例如拉滚动条,或者直接在程序中用gtk_adjustment_set_value()函数来改变调节器中的value值。当调节器的upper参数和lower参数被重新配置时,就象用户需要给一个文本编辑框参加了更多的文本后,调节器就会释放出“changed信号。它的定义如下:void (* changed) (GtkAdjustment *adjustment);范围组件将该信号与一个信号处理器相关联,并随时在面板上反映参数的变化。举个例子,滚动条中滑动键的大小与调节器中upper,lower值之差正好

16、成反比。一旦前者有任何改变,面板上的显示也会相应产生变化。不需要在程序中将一个信号处理器与该信号相关联,一切都是GTK完成的。假设你直接设置了调节器的这些参数,那么需要在程序中调用下面的语句来释放信号:gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "changed");创立组件小结 从上面可看出,创立一个widget组件可以用以下几个步骤完成:gtk_*_new()调用一个非常有用的函数来产生一个新的widget组件。4.2用gtk_box_pack_start函数连接所有的信号和事件,产生相应的事件处理器来调用回调函数

17、。4.3设置widget组件以及调节器的特性。4.4用适宜的函数将widget组件打包到一个容器盒子或表格中,例如gtk_box_container_start()函数或者gtk_container_add()函数等。4.5用gtk_widget_show()函数来显示组件。用上述方法可创立出程序员所需要的任意窗口构件,再将容器打入窗口并显示窗口之后,程序便进入主循环睡眠状态,主程序编制也就完毕了。事件的处理逻辑放到回调函数中编制。编译程序用下面的命令:完成后在Xwindow环境下运行my_prog.o程序即可。目前X窗口Xwindow和GNU编译系统已成为应用linux或unix操作系统的计算机工作站和大型计算机上最主要的图形用户界面系统,在微机上也有广泛应用。而GTK正是两者结合的编程开发包。它比以往用的Xwindow/Motif编程更为简单方便,功能也很强大,有着较好的应用前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论