1、主要内容vGtk的主要功能vGtk简介v利用Gtk+开发图形界面程序基本程序示例应用容器的程序示例Gtk的作用vGtk+工具包在XWindows中的作用是Xlib之上更高层的开发工具包,它们将底层的Xlib的API进行封装,提供更高级的接口,达到降低开发难度,提高开发效率的目的。网络协议X客户端(应用程序)X工具包、Gtk+,QtXLibX客户端(应用程序)X工具包、Gtk+,QtXLibX服务器设备驱动程序Gtk简介v来源:Gimp(GUN Image Manipulation Program)v以Gtk+为基础的应用软件GimpGladeGnomeAbiworddia等vGtk的主要组成G
2、lib:底层核心库Pango:界面布局和国际化Atk:其它功能 开发图形界面程序v 基本程序示例on_btn_clicked(),按钮事件处理程序on_delete(),窗口关闭事件处理程序helloworld.chelloworld.c代码片断代码片断1 1部分辅助函数部分辅助函数1#include 2void on_btn_clicked(GtkWidget*widget,gpointer data)3 g_print(Hello World!n);4 5void on_delete(GtkWidget*widget,GdkEvent*event,gpointer data)6 g_pri
3、nt(Window Closed.n);7 gtk_main_quit();8 helloworld.c代码片断代码片断2主函数部分主函数部分9int main(int argc,char*argv)10 GtkWidget*window;11 GtkWidget*button;12 gtk_set_locale();13 gtk_init(&argc,&argv);/初始化运行环境初始化运行环境14 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);/创建窗口创建窗口15 gtk_window_set_title(GTK_WINDOW(window),He
4、llo World!);16 gtk_container_set_border_width(GTK_CONTAINER(window),10);17 g_signal_connect(G_OBJECT(window),delete_event,18 G_CALLBACK(on_delete),NULL);/关联窗口关闭事件关联窗口关闭事件19 button=gtk_button_new_with_label(Hello World);20 g_signal_connect(G_OBJECT(button),clicked,21 G_CALLBACK(on_btn_clicked),NULL);
5、/关联按钮事件关联按钮事件22 gtk_container_add(GTK_CONTAINER(window),button);23 gtk_widget_show_all(window);/显示窗口显示窗口24 gtk_main();/启动消息循环启动消息循环25 return 0;26 基本程序示例v程序运行效果组成:v一个按钮v一个窗口动作:v点击按钮,在终端输出一个字符串v点击关闭窗口,在终端输出一个字符串后,退出基本程序示例v程序的编译运行假设条件:v源文件保存在当前工作目录中;v源文件命名为helloworld.c利用gcc编译:v命令:$gcc helloworld.c o he
6、lloworld pkg-config gtk+-2.0 -cflags -libsv说明输出文件为helloworld以命令pkg-config gtk+-2.0 -cflags -libs的运行结果为gcc的额外参数;运行:v./helloworld运行常用事件及处理函数原型常用的常用的gtk+事件及处理函数原型事件及处理函数原型事件源事件源事件名事件名处理函数原型处理函数原型GtkWidgetshowvoid user_function(GtkWidget*widget,gpointer data);expose-eventgboolean user_function(GtkWidget
7、*widget,GdkEventExpose*event,gpointer data);delete-eventGtkButtonactivatevoid user_function(GtkButton*widget,gpointer data);clickedenterGtkComboBoxchangedvoid user_function(GtkComboBox*widget,gpointer data);GtkListselect-childvoid user_function(GtkList*list,GtkWidget*widget,gpointer data);selection-
8、changedvoid user_function(GtkList*list,gpointer data);应用容器的Gtk程序v容器:所谓容器,就是可以在其中放置其它界面元素的元素。其中放置的元素可以是可见的按钮、图标,也可以还是一个容器;以继承的观点来理解,GtkWidget有一个直接的派生类GtkContainer作为所有容器类的基类;按照容器中可以容纳元素的个数,容器又可以分为两类:v只能容纳一个元素的容器;v可以容纳多个元素的容器。应用容器的Gtk程序v常见的容器:容纳一个元素:(GtkBin的子类)vGtkWindow vGtkButtonvGtkFrame容纳多个元素:(GtkC
9、ontainer 的子类)v GtkBox vGtkTablevGtkPanelv这类容器通常称为布局应用容器的Gtk程序v程序界面btn_quit btn_start btn_go label entry text+scroll_win window 应用容器的Gtk程序v程序源文件目录组织guess.c 定义主函数的地方 functionsfuntion.h 其它函数的头文件function.c其它函数的实现文件当前工作目录./表格布局的使用v本例中为43布局,即4行3列321001234btn_startbtn_quitlabelentrybtn_gotext,scroll_win向布局
10、中放置界面元素v 向表格中放置界面元素的基本函数void gtk_table_attach_defaults(GtkTable*table,/表格布局GtkWidget*widget,/界面元素guint left_attach,/列起始编号guint right_attach,/列终止编号guint top_attach,/行起始编号guint bottom_attach/行终止编号);示例中元素的位置参数元素名称元素名称列起列起始始列终列终止止行起行起始始行终行终止止btn_start0101btn_quit1201btn_go2312label2301entry0212text,scroll_win0324课后练习1.简述gtk+在X Window系统中的地位。2.简述gtk+的组成。3.以gtk+为基础,现在有哪些已经比较成熟的应用应用软件项目?4.简述gtk+所使用的许可证特点。5.利用gtk+编一个图形界面程序,至少用到窗口、按钮和一种布局。