您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > GTK+程序设计中文版
GTK+简介关于本初级教程l本GTK+程序初级教程采用了“引导”式的方法来教你如何使用GTK+。本教程所用的编程语言为C语言。并且整个教程中方法已经在Linux中测试通过。本教程适用GTK+的初级兼代中级水平的程序员。GTK+GTK+是一种函数库是用来帮助制作图形交互界面的。整个函数库都是由C语言来编写的。GTK+函数库通常也叫做GIMP工具包。因为,一开始GTK+是用来编写“GIMP”–这个图形处理软件的。从那以后,GTK+就逐渐成为了LinuxandBSDUnix下最受欢迎的用于图形交互界面(GUI)设计的工具包之一。时至今日,大多数的Linux下的GUI软件(有图形交互界面)都是由GTK+或者QT来编写的。GTK+是一种面向对象式的API(applicationprogramminginterface)。Glib是GTK+的基础,而这种“面向对象系统”正是由“Glib”来提供的。GObject也就是这种面向对象的机制可以为GTK+绑定很多种开发语言。目前存在的语言有:C++,Python,Perl,Java,C#,PHP,等其他高级语言。GTK+和以下“函数库”存在着依赖关系•Glib•Pango•ATK•GDK•GdkPixbuf•CairoGlib是一种通用的函数库。她提供了各种各样的语言特性,譬如说:各种数据类型,字符串函数,错误通知,消息队列和线程。Pango是一种函数库,用来实现国际化和本地化的功能。ATK一种平易近人的工具函数包,她提供了快捷键服务为肢体有缺陷的人使用电脑提供了便利。GDK是一种函数库,她为整个GTK+图形库系统提供了一些底层的“图形实现”和“窗口实现”的方法。在Linux中GDK是位于X服务器和GTK+函数库之间的。在最近的GTK+发行版本中,越来越多的功能性函数,都交给了Cairo函数库来处理。GdkPixbuf函数库是一种函数库工具包用于加载图像和维护图像“缓存”的(pixelbuffer)。Cairo是一种函数库用于制作二维图像。从GTK+2.8版本以后,Cairo就正式成为GTK+系统中的一员了。GnomeandXFce桌面环境系统都是用GTK+来编程实现的.SWTandwxWidgets是种很著名的编程框架,也是用GTK+来编程实现的。最杰出的GTK+软件的代表是Firefox(火狐浏览器)和Inkscape。编译GTK+应用程序有一个非常方便的工具--pkg-config,可以帮助我们编译GTK+的应用程序。pgk-config可以提供各种安装函数库(譬如GDK,Pango等)的位置。简单点说,就是我们如果想使用某种函数库,Pkg-config就会为我们提供所需要的lib与include文件的位置。pkg-config是从一些通常以“.pc”结尾的文件中,得到所需要的信息的。gcc-osimplesimple.c`pkg-config--libs--cflagsgtk+-2.0`上面的编译命令,就是在展示我们如何去编译一个简单的源文件——“simple.c”。$pkg-config--cflagsgtk+-2.0-I/usr/include/gtk-2.0-I/usr/lib/gtk-2.0/include-I/usr/include/atk-1.0-I/usr/include/cairo-I/usr/include/pango-1.0-I/usr/include/glib-2.0-I/usr/lib/glib-2.0/include-I/usr/include/freetype2-I/usr/include/libpng12上面列出了pkg-config为你自动提供的编译所需要的include文件的信息。$pkg-config--libsgtk+-2.0-lgtk-x11-2.0-lgdk-x11-2.0-latk-1.0-lgdk_pixbuf-2.0-lm-lpangocairo-1.0-lfontconfig-lXext-lXrender-lXinerama-lXi-lXrandr-lXcursor-lXfixes-lpango-1.0-lcairo-lX11-lgobject-2.0-lgmodule-2.0-ldl-lglib-2.0上面列出了pkg-config为你自动提供的编译所需要的lib文件的信息。Sources•gtk.org•gtkforums.com•GTK+/Gnomeapplicationdevelopment第一个GTK+程序在这一章节中,我们将开始编写第一个GTK+程序。超级简单的例子我们要“制造”一个超级简单的GTK+程序。就是显示一个空白的窗口。#includegtk/gtk.hintmain(intargc,char*argv[]){GtkWidget*window;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);gtk_main();return0;}这个例子就是为我们显示了一个空白的窗口。gcc-osimplesimple.c`pkg-config--libs--cflagsgtk+-2.0`这就是我们用来编译这个例子的命令。下面我们将对这个简单的程序进行详细的解读。gtk_init(&argc,&argv);这就是在初始化整个GTK+程序,是每一个GTK+程序必不可少的部分。window=gtk_window_new(GTK_WINDOW_TOPLEVEL);这里我们首先生成了一个构件——GtkWindow.这个窗口构件的种类是GTK_WINDOW_TOPLEVEL..Toplevel窗口拥有一个标题栏和边框。他们同意由窗口管理器进行管理。gtk_widget_show(window);在我们生成了一个窗口构件以后,必不可少的是,我们需要用这句语句来显示构件。gtk_main();这句代码语句将进入“主循环”。在这一点上,GTK+程序将安静的等待“事件”(event)的发生,以便做出相应的反应。Figure:Simple生成一个窗口如果我们不安排窗口的摆放位置的话,那么窗口管理器将为我们给这个窗口“安一个家”。在下个例子中,我们将走进“窗口”。#includegtk/gtk.hintmain(intargc,char*argv[]){GtkWidget*window;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window),Center);gtk_window_set_default_size(GTK_WINDOW(window),230,150);gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_widget_show(window);g_signal_connect_swapped(G_OBJECT(window),destroy,G_CALLBACK(gtk_main_quit),NULL);gtk_main();return0;}在我们上面的这个例子,我将深入了解窗口构件(windowwidget),为窗口构件设置标题和大小。gtk_window_set_title(GTK_WINDOW(window),Center);gtk_window_set_title()这个函数就可以为window设置一个标题,如果我们不用这个函数的话,GTK+将用源文件的名字来作为窗口的标题。gtk_window_set_default_size(GTK_WINDOW(window),230,150);上面这个代码片段为window设置了230x150像素的大小。值得注意的是,我们这里提到的大小是指主窗口的大小;而不包括窗口管理器提供的修饰或者装饰的部分。gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);这段代码把窗口设定在显示器的中央。g_signal_connect_swapped(G_OBJECT(window),destroy,G_CALLBACK(gtk_main_quit),NULL);在之前的例子中,我们没有设置窗口的关闭,当我按下右上角的“X”时。我们可以看到,如果是从命令行的方式来运行例子程序的话,默认情况下窗口程序并不会对你刚刚的动作作出反应(当然,最新的窗口管理器,譬如X11会强行关闭)。我们必须要明确为这个例子程序连接上一个关闭的信号(thedestroysignal),就是gtk_main_quit()这个函数。应用程序图标的制作在下面的例子中,我们会进行应用程序图标的制作。大多数的窗口管理器都会把图标放置在标题栏的左上方和任务栏上。#includegtk/gtk.hGdkPixbuf*create_pixbuf(constgchar*filename){GdkPixbuf*pixbuf;GError*error=NULL;pixbuf=gdk_pixbuf_new_from_file(filename,&error);if(!pixbuf){fprintf(stderr,%s\n,error-message);g_error_free(error);}returnpixbuf;}intmain(intargc,char*argv[]){GtkWidget*window;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window),icon);gtk_window_set_default_size(GTK_WINDOW(window),230,150);gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_window_set_icon(GTK_WINDOW(window),create_pixbuf(web.png));gtk_widget_show(window);g_signal_connect_swapped(G_OBJECT(window),destroy,G_CALLBACK(gtk_main_quit),NULL);gtk_main();return0;}上面的就是为一个填加上图标的窗口程序了.gtk_window_set_icon(GTK_WINDOW(window),create_pixbuf(web.png));函数gtk_window_set_icon()是为窗口设置图标用的。函数create_pixbuf()作用是从一个png图象文件中生成GdkPixbuf类型数据。pixbuf=gdk_pixbuf_new_from_file(filename,&error);根据官方公布的文档说明,函数gdk_pixbuf_new_from_file()一个文件中加载图象数据,从而生成一个新的pixbuf。至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL的话,程序就会出现错误。Figure:Icon增加和减少下面我们将用一个简单的示例,来完成了“GTK+程序设计初级教程”的第一阶段,在这里我们用到了三个构件:两个按钮和一个标签。这个标签将保存一个整数,两个按钮会分别增加和减少这个数。#includegtk/gtk.hgintcount=0;charbuf[5];voidincrease(GtkWidget*widget,gpointerlabel){count++;sprintf(buf,%d,
本文标题:GTK+程序设计中文版
链接地址:https://www.777doc.com/doc-5937066 .html