使用glade3进行gui编程入门
2011-01-20 14:23:42 阿炯

本站赞助商链接,请多关照。 1、Glade介绍
Glade是一个程序界面设计工具。使用它,可以很方便的制作出各种界面。并且在程序代码中,不需要对界面进行定义和配置,大大缩短了程序开发周期;Glade将界面信息保存到一个.glade文件中,应用程序通过调用这个.glade文件,即可生成用户界面。

其设计初衷就是要把 GTK+/GNOME 程序的界面描述从源代码里分离出来,即使用 xxx.glade 文件来描述界面,而不是把生成界面的 c 代码写再源代码中,这样的好处就是在后期修改程序界面非常容易,只需要使用 Glade来调整界面即可(实际是仅仅修改了 xxx.glade 文件,无需对源程序做改动)。另外,使用 .glade 文件来生程序界面并不会影响到你的程序的效率,因为你只需要一次装入所有界面,然后在需要时直接使用。

2、深入Glade
当打开Glade3时,会出现一个对话框让你选择你的项目的格式和一些基本属性,这里就按照默认的,不要修改。格式主要是指glade3界面生成器现在能生的xml界面描述文件,分别是libglade和gtkbuilder. libglade就是以前所使用的,要依赖于libglade库的。而gtkbuilder是gtk 2.12以后版本直接支持的,gtkbuilder是设计来代替libglade的将会是主流。

来认识下你看到的Glade窗口,最上面是"菜单栏",菜单栏下面的是"工具栏";

调色板:接下来左边那列叫调色板(Palette),它包含了一些常用的组件,如动作、顶层、容器、控制显示,都在那里;

工作区:中间的白色空间是你的工作区(以后做的GUI图形就在这显示);

检查区:右边分二个部分上部的白色部分叫"检查区"Inspector,是你添加的组件的一个导航列表,也就是组件树;

属性区:右边下部是Properties,当你点击了某个组件后,在这里会出现它的属性,你可以对它们进行编辑。

3.设计界面
我们开始第一个程序,点击左边"调色板"里的组件,然后摆放位置,调节属性。就这么简单,如下5步,就能做一个GUI的软件出来.

1)、在"调色板"里点击"顶层"下的"窗口"组件,这时在中间的"工作区"会出现一个深灰方框,这个就是你做的GUI的程序的主窗口。

2)、进入"检查区"里,用鼠标选中刚才新建的那个窗口,在下面的"属性区"里进行如下编辑:
"常规"选项,将"名称"属性改为window,将"窗口标题"属性改为'主窗口';

在"信号"Signals选项下,你可以在'GtkWidget'那一类中找到个'delete-event',为它的'操作句柄'选择gtk_main_quit,同样给'GtkObject'那一类中唯一的'destroy'选择gtk_main_quit。

3)、然后回到"调色板"在里点击"容器"组件中的"固定的"那个组件,拖到你上一步新建的window中点击,这样就创建好了一个容器,然后按照给window修改名字的方法将其改名为fixed。容器就是一个可以存放其他组件并进行布局的一种组件.

4)、在'调色板'里点击"控制和显示"下的"标签"组件,再在工作区上的"固定的"容器上点击,这样你就把"标签"放到了"固定的"容器里了,在"属性"内的"常规"选项下将'名称'属性改为label,和修改"标签"属性为"你好,世界!".

注:以上的动作,你都可以在"工作区"上方的工具栏上占击的那个"拖动调整大小"的按钮,然后你就可以选中组件进行拖拽,来摆放出一个合适的位置,让你的程序更加漂亮。

5)、在"调色板"里点击"控制和显示"下的"按钮",然后在"固定的"容器上点击,这样你就在上面这个容器里又放置了一个按钮,将其"名称"属性改为"button","标签"属性改为"退出".

这样界面就设置完成了,保存为'hello_world.glade'。最后的设计完显示的内容如下:



4、使用Perl来写代码
使用Perl写Gtk的GUI,实在是容易,在Perl中,Gtk模块相当的成熟,开发也很快.主要分三步.
1)、读入glade布局文件.
2)、访问窗体上的控件.
3)、编写控件对应的事件函数

use Glib qw/TRUE FALSE/; #导入 Glib 模块
use Gtk2 '-init'; #导入Gtk2模块。-init 参数相当于调用了C库中的gtk_init函数。它会作一些必须的初始化工作.
use Gtk2::GladeXML;#用来解析我们上面所做的界面模块.
 
my $gladexml = Gtk2::GladeXML->new('hello_world.glade');  #读入glade生成的xml文件
$gladexml->signal_autoconnect_from_package('main');    #导入默认包中的信号
my $window = $gladexml->get_widget('window');    #得到window和button还有label三个组件
my $button = $gladexml->get_widget('button'); 
my $label = $gladexml->get_widget('label');
 
#以下是对信号的处理
$button-> signal_connect( clicked => sub{Gtk2->main_quit;}); #按下button时,会发出clicked的信号,现在的作用是退出.
sub gtk_main_quit { Gtk2->main_quit();} #窗口在关闭时退出Gtk2的主循环。如果不加入这个回调函数,在窗口关闭后程序不会自动退出。
 
$window->show_all(); #显示窗口

Gtk2->main();    #进入Gtk2的事件

exit 0;

运行结果图: