4.3 开始
If(!class_exist("gtk"))
{
dl("php_gtk.".(strstr(PHP_OS,"WIN") ? "dll" : "so"));
}
这段程式码会判断PHP-GTK延伸模组是否已启动,如果没有,它就会读取适当的档案。在上面的范例中,是靠判断执行的作业系统是Windows还是其它来判断要载入php_gtk.dll还是php_gtk.so。
Function delete_event()
{
return false;
}
这里建立了一个名为delete_event的function,这个function是等会儿delete-event signal发出时的callback function。内容传回false会告诉PHP-GTK用预设的signal handler来处理,而预设的handler会关闭视窗(同时会呼叫该视窗的destroy() 函式),在这里,它会关闭程式(因为这个范例程式只有一个主视窗,一旦关闭就会关闭程式)。
Function destroy()
{
Gtk::main_quit();
}
这里建立了一个函式,destroy()。在这个程式中,这个函式是很重要的,因为我们在关闭程式的时候会连接到它。之前说过,Gtk::main_quit()会关闭程式,如果我们在这个程式中没有定义这个function或是这个function里面没有Gtk::main_quit()这行,那么这个程式就不会关闭了。以上一段程式码说明里提到的delete-event来说,return false之後预设会执行关闭视窗的动作,还会呼叫destroy()函式,如果这里没有定义或是没有Gtk::main_quit()这段的话,主视窗的确会关闭,可是程式并不会结束,因为主程式回圈aGtk::main()还在跑。
<?php
$window = &new GtkWindow();
//设定名字以辨别各个视窗
$window->set_name('main window');
//设定视窗的标题
$window->set_title('对PHP-GTK的介绍');
//设定视窗的大小
$window->set_usize(160, 120);
//呼叫destroy()函式来结束程式
$window->connect('destroy', 'destroy');
//呼叫delete_event()函式来关闭视窗
$window->connect('delete-event', 'delete_event');
//设定视窗的边框宽度
$window->set_border_width(10);
//设定视窗的位置
$window->set_position(GTK_WIN_POS_CENTER);
//显示视窗和所有child widget (不显示就看不到)
//最後这两行一定要放在程式码的最後,否则什么都看不到
$window->show_all();
Gtk::main();
?>
执行程式可以看到如下的图:
//建立一个GtkFrame
$frame = &new GtkFrame('经过简易修改的程式');
//把GtkFrame放到GtkWindow里
$window->add($frame);
//最下面两行不要动
结果如下图:
下面这段建立一个GtkVBox作为container,并把GtkEntry、GtkHSeperator、GtkLabel和GtkButtonBox都pack进去,所谓pack,是GtkBox底下的container们特别加入的放入widget的方法,就类似於add(),而pack用的方法一般是pack_start()和pack_end(),比add()好的地方是可以控制将widget增加进去之後widget的位置(不过只要是container就会有add()方法),欲查询详细资料请至
http://gtk.php.net/manual/en。
//建立一个GtkVBox,为常用的container
$box1 = &new GtkVBox();
//把GtkVBox放到GtkFrame里面
$frame->add($box1);
//建立一个GtkLabel并将它pack到GtkVBox里
$label = &new GtkLabel();
$box1->pack_start($label);
//建立一个GtkHSeparator并将它pack到GtkVBox里
$separator = &new GtkHSeparator();
$box1->pack_start($separator);
//建立一个GtkEntry并将它pack到GtkVBox里
$entry = &new GtkEntry();
$box1->pack_start($entry);
//建立一个GtkButtonBox并将它add到GtkVBox里
//因为GtkButtonBox也是一个无形的container,位置不重要,所以用add()
$box2 = &new GtkHButtonBox();
$box1->add($box2);
执行如下图:
最後这段程式码会建立两个GtkButton并pack到GtkButtonBox里去,还有为两个按钮加上连接,使它们起作用,并建立一个函式,只要按下GtkButton就会将GtkLabel的内容换成GtkEntry中的文字。
$button = &new GtkButton('显示输入的字');
//连接"clicked" signal到set_name()函式,附加$label和$entry两个widget
$button->connect_object('clicked','set_name',$label,$entry);
$box2->pack_start($button);
$button = &new GtkButton('离开程式');
//连接"clicked" signal到destroy()函式,将会关闭程式
$button->connect('clicked','destroy');
$box2->pack_start($button);
function set_name($label,$entry)
{
//用GtkEntry的get_text()方法从取得文字方块内容
$gettext=$entry->get_text();
//用GtkLabel的set_text()方法设定新的文字
$label->set_text($gettext);
}
//最後再提一下那两行┅.
$window->show_all();
Gtk::main();
寫到這裡,整個程式就算是完成了,來看看執行的結果吧~
5. 其它
5.1 进一步学习
如果在结束了上面的课程之后你还想要更了解PHP-GTK,或是对于本文的内容有任何
不明白的地方,这里提供你几个地方可以查询资料: