WEB开发网
开发学院WEB开发PHP PHP开发学堂:PHP-GTK介绍及其应用 阅读

PHP开发学堂:PHP-GTK介绍及其应用

 2008-02-15 18:32:22 来源:WEB开发网   
核心提示://建立一个GtkButton,按钮文字为"按我"$button = &new GtkButton("按我");$button->connect("clicked", "you_clicked");//把GtkButt

  //建立一个GtkButton,按钮文字为"按我"
  $button = &new GtkButton("按我");
  $button->connect("clicked", "you_clicked");
  //把GtkButton放到是container的GtkWindow中
  $window->add($button);
  //显示$window以及它的所有child widget
  $window->show_all();
  //进入程序主回圈(即程序启动之意)
  gtk::main();
  ?>
  执行它的话,就会出现一个视窗,里面有一个写着"按我"的按钮,按下按钮程序就会执行you_clicked函式。在这个程序中,$window对象的"destroy" signal是在使用者按下视窗右上角的"X"时会送出的;而$button对象的"clicked" signal是在使用者按下该按钮的时候会送出的。最后那一行的gtk::main() 是一定要执行的,这样才能告诉电脑要开始执行程序,既然有开始执行,那就一定有停止吧? 没错,用gtk::main_quit() 就可以停止程序了。
  
  看完了以上的范例,有些读者可能会有疑问「如果我想执行送出signal的widget之外的widget的method怎么办?」,这时候,就要用另一个method了 a connect_object(),它可以跨对象呼叫方法或是传递其它对象做为function的叁数。跨对象呼叫方法如下:
  
  $window->connect_object("destroy", array("gtk","main_quit"))
  
  如此,在$window对象的"destroy" signal送出的时候就会唤起gtk::main_quit()这个方法,程序就会终指执行。
  
  在介绍连接方法的最后,再提一下connect() 和 connect_object() 的自订增加要传给callback function的叁数的办法。见例子:
  php
  $parameter="新超人";
  $button1 = &new GtkButton("测试");
  //将"clicked" signal连接到who_are_you函式,附加叁数$parameter
  $button1->connect("clicked","who_are_you",$parameter);
  $button2 = &new GtkButton("测试二");
  //将"clicked" signal连接到kill_the_button1函式,附加叁数$button1
  $button2->connect_object("clicked","kill_the_button1",$button1);
  
  function who_are_you($widget,$parameter){
  echo $parameter;
  }
  
  function kill_the_button($button){
  $button->destroy();
  }
  ?>
  注意那两个function,who_are_you有两个叁数对吧? 第一个是做什么用的呢?为什么它会自动出现?? 因为,每个signal的callback function都会因为signal的不同而加上一些内定一定会传入callback function的叁数,而基本上所有的signal都至少会传给callback function一个叁数a产生该signal的物件。所以who_are_you的第一个叁数就是$button1,而第二个就是$parameter,也就是新超人。那kill_the_button函式就不一样罗~ 因为connect_object()函式会呼略原本signal的callback function的预设叁数,所以kill_the_button就只有附加在connect_object最后的$button1叁数了,如此,kill_the_button就可以呼叫$button1的方法或是取得它的属性,这里呼叫了$button1的destroy方法,于是$button1就会被消灭。
  
  2.8 Event(s)
  Event是signal的一种,但是它的用途还有功能都非常强大。就signal来说,signal这种东西都是内建在widget上的,所以,例如GtkWindow没有"clicked"signal,那么在不用event signal的情况下,GtkWindow是决对不可能送出clicked之类的signal的。那如果用了event signal呢? Event signal是可以允许被加到任何的widget上的,所以就算这个widget本来没有发出"clicked"signal的功能,你也可以用add_events() 来为它加上按了它之后event signal会做什么样的反应。而event signal中包含的资讯比较多,比如说当你在使用"key-press-event"这个event signal的时候,同时也会记录到你按下的是什么按键,于是通常event signal的callback function格式内定会有两个叁数,第一个依然是送出signal的widget,而第二个就是$event,这个$event是一个class,里面的属性和方法会因为送过来的event signal种类而不同。就"key-press-event"传回的$event class来说,里面有一个属性是keyval,内容就是使用者按的是哪一个键。这些对于一个程序设计师来说常常是很有用的资讯。所以event的重要性是不可忽视的,就算刚开始会有点不懂,也要慢慢的融入才行。这一节也非常重要。

上一页  1 2 3 4 5  下一页

Tags:PHP 开发 学堂

编辑录入:coldstar [复制链接] [打 印]
赞助商链接