Gtk+/Glade编程(一)--简介

http://jianjiaosun.blog.163.com/blog/static/13612448620110169390202/

By unanao

本文是我学习GTK+和glade3进行图形界面编程的一点学习心得的整理,主要是使用GTK+/Glade编程的文档较少,而且没有说名如何将二者联系
起来,以及二者之间的关系。本文通过比较使用Glade和不使用Glade进行GUI编程进行比较,找出二者的异同,从而可以为学习使用Glade进行
GUI设计提供一点学习思路。

一、 什么是GTK+

首先,GTK+ 并不是一门编程语言,而是一个开发工具套件,或者说是一个开发库,用来进行跨平台GUI应用程序的开发,Linux,Windows或其它平台都能使用
GTK+。GTK+ 就好比Windows上的MFC 和Win32 API,JAVA 上的Swing和SWT,或者Qt(KDE 使用的Linux下GUI开发套件)。

尽管GTK+ 是用纯C语言编写的,但是提供了其它各种语言的捆绑,允许程序员选择自己喜欢的开发语言来开发GTK+ 应用程序,比如C++, Python,Perl, PHP,Ruby等等。

GTK+ 开发套件基于三个主要的库:Glib,Pango和ATK,当然我们只需关心如何使用GTK+ 即可,GTK+ 自己负责与这三个库打交道。Glib 封装了大部分可移植的
C 库函数(允许你的代码移植到Windows 和Linux 上运行)。使用C 或C++时,将大量使用Glib 库函数,在我们用C 语言的具体实现过程中我会详细解释它们。高级语言如Python 和Ruby 却不用担心Glib 的使用,因为它们有自己的标准库提供了相应的功能。

GTK+ 及相关的库时按照面向对象设计思想来实现的,至于这时如何实现的现在并不重要,不同的编程语言有不同的实现方法,重要的是要知道GTK+ 使用面向对象编程技术即可(是的,即使是C 实现的)。每一个GTK+ 的GUI元素都是由一个或许多个“widgets”对象构成的。所有的widgets都从基类GtkWidget派生。例如,应用程序的主窗口是GtkWindow类widget,窗口的工具条是GtkToolbar类widget。一个GtkWindow是一个GtkWidget,但一个GtkWidget并不是一个GtkWindow,子类widgets 继承自父类并扩展了父类的功能而成为一个新类,这就是标准的面向对象编程思想。我们可以查阅GTK+参考手册找到widgets直接的继承关系。对于GtkWindow它的继承链看起来像这样:

GObject
   +----GInitiallyUnowned
         +----GtkObject
               +----GtkWidget
                     +----GtkContainer
                           +----GtkBin
                                 +----GtkWindow

因此,GtkWindow继承自GtkBin,GtkBin继承自GtkContainer,等等。在第一个程序中,你不需要担心GtkWidget对象。各widget之间的继承链之所以重要是因为当你查找某个widget的函数,属性和信号时,你应该知道它的父类的函数,属性和信号也被此widget继承了,可以直接使用。在第二部分讲述此实例的代码时,
你能更清楚的认识到这一点。我们来看命名规则,命名规则带来的好处是非常便于使用。我们能够清楚的看出对象或函数是哪个库中的。以Gtk开头的所有对象都是在
GTK+中定义的。稍后我们会看到类似Glade XML以Glade开头的是Libglade库对象或函数,GError以G开头的在GLib库定义。所有Widgets类都遵循标准camelcase命名习惯。所有操作函数都以下划线组合小写字母单词命名。如gtk_window_set_title()设置GtkWindow对象的标题属性。

二、Glade

Glade是一种开发GTK+ 应用程序的RAD(Rapid Application Development)工具。Glade自身就是一个GTK+应用程序,因为它就是用GTK+ 开发出来的,Glade
用来简化UI 控件的设计和布局操作,进行快速开发。Glade的设计初衷是把界面设计与应用程序代码相分离,界面的修改不会影响到应用程序代码,Glade设计的界面保存为glade格式文件,它实际上是一种XML文件。

Glade 起先能根据创建的GUI 自动生成C 语言代码(你仍然能找到此类相关的实例),后来可以利用Libglade库在运行时动态创建界面,到了Glade3 ,这些方法都不赞成使用了。这是因为,Glade需要做的唯一的事就是生成一个描述如何创建GUI的glade文件。这给编程人员提供了更多的灵活性和弹性,避免了用户界面部分微小的改变就要重新编译整个应用程序,同时其语言无关性,几乎所有的编程语言都可以使用Glade。

三、Gtk+和Glade 相关开发环境的搭建

以Debian 为例:

安装对应的包名为:

  • gtk+:libgtk2.0-dev
  • gcc:build-essential
  • glade:glade
  • make:make
  • Devhelp:devhelp

#aptitude install libgtk2.0-dev glade build-essential make devhelp

注:包的名字可能改变(主要是版本号的改变),如果安装的时候,说找不到哪个包,可以使用aptitude search 包名  (如 aptitude search gtk)

四、文档的获得

1、Gtk+ Tutors:

http://library.gnome.org/devel/gtk-tutorial/stable/   (官方)

ftp:/ftp.gtk.org/pub/gtk/tutorial                     (pdf)

初学者的tutors:

http://zetcode.com/tutorials/gtktutorial/

2、GtkBuilder

http://library.gnome.org/devel/gtk/stable/GtkBuilder.html

3、手册

“应用程序” --> "编程" --> "Devhelp"

4、更多文档:

http://www.gtk.org/documentation.html

四、熟悉Glade

1、启动Glade

如果有“Set Options in your project”的窗口,直接关闭即可

2、熟悉Glade的主界面

左边的是"Palette" 就像是一个图形编辑程序,可以用它上面的GtkWidgets来设计你的用户界面。中间部分(刚启动时是空白一片)是"Editor" 所见即所得的编辑器。在右边,上部是"Inspector",下部是widget "Properties" 。Inspector以树形显示当前创建的控件的布局,可以对控件进行选择。我们通过Properties中各项内容来设置widgets的属性,包括设置widgets的信号回调函数。

五、编程实现一个简单的窗口:

点击Palette上"Toplevels"分组框中的GtkWindow图标,你会看到一个灰色窗口出现在Glade中间的Editor 区域。这是GtkWindow的工作区

窗口管理器(如GNOME)会自动加上窗口标题,关闭按钮等,因此我们编辑时看不见。使用Glade时,我们总是需要首先创建一个顶层窗口,典型的是创建一个GtkWindow。以 "window.glade" 文件名保存工程。这个文件是一个XML文件,你可以在文本编辑器中打开它:

你看,这就是一个简单的XML文件,Glade能在修改过程中自动保存到该文件。

五、编写一个简单窗口的程序

1、使用glade生成的window.glade,编写一个简单窗口的程序

/*
Then save this file as window.c and compile it using this command
(those are backticks, not single quotes):
  gcc -Wall -g -o window window.c `pkg-config --cflags --libs gtk+-2.0`
 
Then execute it using:
  ./window
*/
#include
 
int main (int argc, char *argv[])
{
    GtkBuilder      *builder;
    GtkWidget       *window;
 
    gtk_init (&argc, &argv);
 
    builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "window.glade", NULL);

window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
    gtk_builder_connect_signals (builder, NULL);
 
    g_object_unref (G_OBJECT (builder));
       
    gtk_widget_show_all(window);               
    gtk_main ();
 
    return 0;
}

编译:

$gcc -o window window.c `pkg-config --cflags --libs gtk+-2.0`

运行:

$./window

2、不使用glade生成,而是在c代码中直接创建

#include

int main(int argc, char *argv[])
{

GtkWidget *window;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
   
    gtk_main();

return 0;
}

总结: 比较1和2,可以发现:

使用Glade生成的xml文件进行解析生成GUI

  • 不需要调用gtk_window_new(直接由xml文件解析创建)
  • 需要调用GtkBuilder(由GtkBuilder解析xml文件)


以可以发现使用Glade设计UI,然后用于Gtk程序中十分容易,但是要想知道各个组建如何使用,如何选择组建,还是要学习Gtk+的文档。虽然
glade可以帮我们完成界面的设计,但是只是界面而已,各个组件的用法还是要参考GTK+的tutors和手册。下面将比较使用glade进行界面设计
和使用gtk+直接编程的区别,从而理解使用gtk+/glade进行编程。

阅读(3831) | 评论(0) | 转发(9) |

0

上一篇:GTK+ and Glade3 GUI Programming

下一篇:Gtk+/Glade编程(二)--入门

相关热门文章

  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口

热门推荐

    -->

    给主人留下些什么吧!~~

    评论热议

    Gtk+/Glade编程(一)--简介

    时间: 2024-10-29 04:41:30

    Gtk+/Glade编程(一)--简介的相关文章

    部分编程库简介

    1.MFC 微软基础类库(MicrosoftFoundationClasses)的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. 2.VFW VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包,VFW的核心是AVI文件标准. 3.DirectShow DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Mod

    【专家坐堂】四种并发编程模型简介

    本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" ?       并发 :同一时间 对待 多件事情 (逻辑层面) ?       并行 :同一时间 做(执行) 多件事情 (物理层面) 并发可以构造出一种问题解决方法,该方法能够被用于并行化,从而让原本只能串行处理的事务并行化,更好地发挥出当前多核CPU,分布式集群的能力. 但是,并发编程和人们正常的思维方式是不一样的,因此才有了各种编程模型的抽象来帮助我们更方便,更不容

    GTK+ 及X window简介

    GTK+简介: GTK+(The GIMP Toolkit)最初是为一个叫做GIMP的点阵图图像编辑器的软件设计的,由Peter Mattis,Spencer Kimball和Josh MacDonald于1997年在加州大学伯克利分校的eXperimental Computing Facility完成.GTK+后来被作为GNOME和XFCE这两个主流linux桌面环境的默认图像开发包.开始GTK+用于linux操作系统,后来又扩展到支持其他的类UNXI系统,像微软的windows,BeOS,S

    Windows数据库编程接口简介

    数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法以及数据库系统编程接口的使用方法是程序员非常重要的基本技能之一.所以我花了一定的时间学习了在Windows平台上使用COM接口的方式操作数据库.这段时间我会将自己学习过程中掌握的知识和其中的一些坑都发布出来,供个人参考,也方便他人学习 现在常见的DBMS主要有ORACLE.Sybase.Inform

    第16章 GTK+ gnome编程

    gtk-demo 展示所有构建外观 pkg-config --cflag --libs gtk+-2.0 //man pkg-config to see information 编译是: gcc file.c -o filename `pkg-config --cflag --libs gtk+-2.0` // $(pkg-config ..........)  as well 必须先初始化: gtk_init( &arc, &argv); // int main( int argc, c

    几种编程风格简介

    面向对象,面向过程,函数式编程,声明式编程 都是一种编程风格: 一.函数式编程lisp就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,模拟数学上的函数,,任意一个函数, 只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用. 函数式编程的特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 不会修改外部参数或变量的值 精简 可读性差 python 不是一个完全意义上的函数式编程语言,只是引用了 函数式编程的风格 比如 map reduce fi

    GDI 编程基础简介

    今天准备重新对GDI的知识进行回顾一下,以便加深认识. 一.GDI 在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄.因为GDI的绘图函数基本上都是有状态的,因此GDI所有的函数都要求一个这样的图形设备描述类型的句柄——HDC.而一个图像设备描述表实际上就是对一种安装在机器上的图形卡的描述.在使用句柄时,其实就是对具体的一种设备进行操作.对于GDI的任何函数的调用,这个设备的信息是必需的. 从本质上来说,提供指向任何GDI函数的HD

    【C/C++学院】(21)Mysql数据库编程--开发简介/SQL语句

    一.mysql安装与管理 tar 解包的命令 tar xvf 包文件名称 tar 打包的命令 tar cvf 要打包的文件名称 rpm卸载命令 rpm -e 包名称 rpm -e 包名称 --nodeps 强行卸载,不检查包的依赖关系 rpm安装包命令 rpm -ivh 包名称 二.字符集 1.首先操作系统的字符集为utf8 查看操作系统字符集命令 locale 2.创建数据库的时候使用CHARACTER SET utf8;指定字符集为utf8 3.设置mysql client字符集 SET N

    廖雪峰Java16函数式编程-2Stream-1Stream简介

    1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream java.io java.util.stream 存储 顺序读写的byte/char 顺序输出的任一Java对象 用途 序列化数据至文件/网络 内存计算/业务逻辑 1.2 Stream和List也是不同的 List元素已经分配并存储在内存中的,而Stream输出的元素并没有预先存储在内存中,它通常