[计算机软件及应用]Glade3+tutorial.doc
《[计算机软件及应用]Glade3+tutorial.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]Glade3+tutorial.doc(35页珍藏版)》请在三一文库上搜索。
1、GTK+ and Glade3 GUI Programming Tutorial -Part 12009年3月27日 23:38原文地址链接 Carrick翻译:Binn.X Wee博客链接: http:/ http:/ Quick Overview of GTK+ Concepts如果你没有任何 GTK+的编程经验,那么,对于我将要阐述的一些概念你也许会听着犯迷糊。不过,不用担心,在遇到这些概念的时候我会详细讲解,以便你能很好的阅读后面的内容。学完这一部分,对 GTK+的基本概念有所了解后,你也许就能有效的利用 Glade进行开发了。首先,GTK+并不是一门编程语言,而是一个开发工具套件,
2、或者说是一个开发库,用来进行跨平台GUI应用程序的开发,Linux,OSX, 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+自己负责与这三个库打交道。
3、 Glib封装了大部分可移植的 C库函数(允许你的代码移植到 Windows和Linux上运行)。使用 C或C+时,将大量使用 Glib库函数,在我们用 C语言的具体实现过程中我会详细解释它们。高级语言如 Python和Ruby却不用担心Glib的使用,因为它们有自己的标准库提供了相应的功能。 GTK+及相关的库时按照面向对象设计思想来实现的,至于这时如何实现的现在并不重要,不同的编程语言有不同的实现方法,重要的是要知道 GTK+使用面向对象编程技术即可(是的,即使是 C实现的)。每一个GTK+的GUI元素都是由一个或许多个 “widgets”对象构成的。所有的widgets都从基类GtkWi
4、dget派生。例如,应用程序的主窗口是 GtkWindow类widget,窗口的工具条是 GtkToolbar类widget。一个 GtkWindow是一个 GtkWidget,但一个 GtkWidget兵不是一个 GtkWindow,子类 widgets继承自父类并扩展了父类的功能而成为一个新类,这就是标准的面向对象编程 OOP(Object Oriented Programming)思想。我们可以查阅GTK+参考手册找到widgets直接的继承关系。对于GtkWindow它的继承链看起来像这样: GObject +-GInitiallyUnowned +-GtkObject +-GtkWi
5、dget +-GtkContainer +-GtkBin +-GtkWindow因此,GtkWindow继承自 GtkBin, GtkBin继承自GtkContainer,等等。在第一个程序中,你不需要担心GtkWidget对象。各 widget之间的继承链之所以重要是因为当你查找某个 widget的函数,属性和信号时,你应该知道它的父类的函数,属性和信号也被此 widget继承了,可以直接使用。在第二部分讲述此实例的代码时,你能更清楚的认识到这一点。我们来看命名规则,命名规则带来的好处是非常便于使用。我们能够清楚的看出对象或函数是哪个库中的。以 Gtk开头的所有对象都是在 GTK+中定义的。
6、稍后我们会看到类似 GladeXML以Glade开头的是Libglade库对象或函数, GError以G开头的在GLib库定义。所有Widgets类都遵循标准camelcase命名习惯。所有操作函数都以下划线组合小写字母单词命名。如gtk_window_set_title()设置GtkWindow对象的标题属性。你需要的所有参考文档都可以从以下网站获得: library.gnome.org/devel/references, 分区 GTK+GNOME 的第 1 页不过,使用 Devhelp更方便,它甚至可以作为一个包来分发。 Devhelp可以浏览或搜索任何安装在你系统上的库的相关文档,当然前
7、提是你必须安装了这些文档。 Introduction to Glade3 Glade是一种开发 GTK+应用程序的 RAD(Rapid Application Development)工具。Glade自身就是一个 GTK+应用程序,因为它就是用 GTK+开发出来的 _ Glade用来简化 UI控件的设计和布局操作,进行快速开发。(译者注:当然,还不仅如此, Glade的设计初衷是把界面设计与应用程序代码相分离,界面的修改不会影响到应用程序代码)Glade设计的界面保存为 glade格式文件,它实际上是一种 XML文件。 Glade起先能根据创建的 GUI自动生成 C语言代码(你仍然能找到此类相
8、关的实例),后来可以利用 Libglade库在运行时动态创建界面,到了 Glade3,这些方法都不赞成使用了。这是因为, Glade需要做的唯一的事就是生成一个描述如何创建 GUI的glade文件。这给编程人员提供了更多的灵活性和弹性,避免了用户界面部分微小的改变就要重新编译整个应用程序,同时其语言无关性,几乎所有的编程语言都可以使用 Glade。 Glade3进行了重新设计,与之前的版本如 Glade2有巨大的改变。 2006年Glade3.0发布,你可以自由获取最新版本进行开发。软件包管理器如 aptitude等应该都有 Glade3的安装包,不过请注意:有个数字 3,因为glade是老版
9、本的 Glade2,Glade3或Glade3才是新版本。你也可以从 glade.gnome.org下载。 Getting Familiar with the Glade Interface启动Glade3,让我们来看看其主界面:左边的是 Palette就像是一个图形编辑程序,可以用它上面的 GtkWidgets来设计你的用户界面。中间部分(刚启动时是空白一片)是 Editor所见即所得的编辑器。在右边,上部是 Inspector,下部是 widget Properties。Inspector以树形显示当前创建的控件的布局,可以对控件进行选择。我们通过 Properties中各项内容来设置 w
10、idgets的属性,包括设置 widgets的信号回调函数。我们先创建一个顶层窗口并保存。点击 Palette上Toplevels分组框中的 GtkWindow图标,你会看到一个灰色窗口出现在 Glade中间的 Editor区域。这是 GtkWindow的工作区:分区 GTK+GNOME 的第 2 页窗口管理器(如 GNOME)会自动加上窗口标题,关闭按钮等,因此我们编辑时看不见。使用 Glade时,我们总是需要首先创建一个顶层窗口,典型的是创建一个 GtkWindow。以tutorial.glade文件名保存工程。这个文件是一个 XML文件,你可以在文本编辑器中打开它: GDK_POINTE
11、R_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 你看,这就是一个简单的 XML文件,在 part2中我们会用 C语言调用 Libglade库来解析这个 XML文件并在运行时生成 UI。XML文件很容易用 Python应用程序或其它任何语言来解析。 Glade能在修改过程中自动保存到该文件。退出文本编辑器,回到 Glade我们继续。 Manipulating Widget Properties现在,Glade的Editor区显示的是一个空的 GtkWind
12、ow widget。我们来修改它的属性。在Properties面板,你会看到4个选项卡:General, Packing, Common, 和 Signals。我们先来谈谈前面的两个。 GtkWidgets有许多属性,这些属性定义了它们的功能和现实方式。如果你查阅一下 GTK+的开发参考文档,找到GtkWidget的Properties一项,列出了 GtkWindow的特有属性,这些在Glade属性面板的 General选项卡中,并且每个 widget的属性都会不一样。 widget属性名称是我们的应用程序直接获取的信息,把此 GtkWindow的name由window1修改为 window。
13、添加 GTK+ Text Editor到Window Title属性:分区 GTK+GNOME 的第 3 页我们稍后讲述 Packing,先来看看 Common,这里也包括属性设置,不过我们不能在开发人员参考文档中相应的 widget属性下看到它们,这是因为这些属性是继承自父类的属性。在参考文档的 Object Hierarchy里你将会看到 GtkWindow的父类 GtkContainer,连接到 GtkContainer属性项你将会看到一个 borderwidth,而在 Glade的属性面板中 GtkWindow继承了这个属性,你可以在 Common选项卡底部找到。我们以后会讲到 Gtk
14、Container,到这里,你应该清楚地知道对象继承链是多么重要了。因为大部分 widgets都从 GtkContainer继承,因此Glade把它的属性放到了 Common Tab下。参考文档的 Object Hierarchy,GtkContainer由GtkWidget继承。链接到 GtkWidget,你会看到其大部分的属性都列在了 Glade属性面板的 Common tab中。这些属性是所有 GTK+ widgets的公共属性,因为它们都继承自GtkWidget。 Specifying Callback Functions for Signals当某些对程序员有意义的事情发生时,控件对
15、象就发出一个信号 signal。这同Visual Basic中的events类似。当用户与界面进行交互时,界面元素发出相应的信号,程序员可以决定哪些信号需要捕获并连接到一个回调函数,完成某些任务。我们遇到的第一个信号,也是你在所有 GTK+应用程序中都会碰到的,是由 GtkObject发出的destroy信号。当一个 GtkObject对象销毁时就发出 destroy信号。这非常重要,因为当用户通过点击一个 widget顶部的X来关闭时, widget就销毁了。我们需要捕获这个信号并正确地退出我们的应用程序。在我们正式为此GUI写代码时做这件事是最好的,不过先得在Glade中指定响应 dest
16、roy信号的具体函数。切换到属性面板的 Signalstab,你将看到一个树形列表,显示了当前 widget及其父类对象的所有信号。这些与参考文档相符。在Handler列下点击灰色文本 并开始编辑它,从下拉列表框中选择on_window_destroy并按回车键。我们也可以键入任何名字,不过Glade提供的下拉框列出了通用的回调函数习惯命名。这个值如何使用得看程序员如何连接信号与回调函数。在这里,我们把 GtkWindow的destroy信号连接到 on_window_destroy函数名上。在 part2中我们会看到这一点的。分区 GTK+GNOME 的第 4 页到这里,我们有了一个 GUI
17、,可以编写代码显示我们的空窗口并在点击了关闭按钮时退出程序,你可以用 C, Python或任何其它语言。在此向导中,我将会充分地向你展示如何在编写任何代码前就用 Glade3建立起完整的 GUI.不过,为了满足你的好奇心,同时也让你了解到要实现这个 Glade用户接口,代码将会是多么的简单,请看代码: In C /* First run tutorial.glade through gtk-builder-convert with this command: gtk-builder-convert tutorial.glade tutorial.xml Then save this file
18、as main.c and compile it using this command (those are backticks, not single quotes): gcc -Wall -g -o tutorial main.c pkg-config -cflags -libs gtk+-2.0 -export-dynamic Then execute it using: ./tutorial */ #include void on_window_destroy (GtkObject *object, gpointer user_data) gtk_main_quit (); int m
19、ain (int argc, char *argv) GtkBuilder *builder; GtkWidget *window; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, tutorial.xml, NULL); window = GTK_WIDGET (gtk_builder_get_object (builder, window); gtk_builder_connect_signals (builder, NULL); g_object_unre
20、f (G_OBJECT (builder); gtk_widget_show (window); gtk_main (); return 0;分区 GTK+GNOME 的第 5 页 In Python (note: you must set the visible property of window to Yes in the Common properties tab in Glade) #!/usr/bin/env python # First run tutorial.glade through gtk-builder-convert with this command: # gtk-
21、builder-convert tutorial.glade tutorial.xml # Then save this file as tutorial.py and make it executable using this command: # chmod a+x tutorial.py # And execute it: # ./tutorial.py import pygtk pygtk.require(2.0) import gtk class TutorialApp(object): def _init_(self): builder = gtk.Builder() builde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 Glade3 tutorial
链接地址:https://www.31doc.com/p-1991533.html