标题: php-gtk2入门学习之事件绑定
phpgtk
新手上路
Rank: 1



UID 1217
精华 0
积分 0
帖子 0
阅读权限 10
注册 2007-6-9
发表于 2007-6-18 21:15  资料  个人空间  短消息  加为好友 
php-gtk2入门学习之事件绑定

原文地址:http://bbs.phpres.com/viewthread.php?tid=1801


php-gtk2入门学习之事件绑定

上次我们在hello glade的时候看到,php-gtk2已经能够根据Glade输出的xml生成窗体了。但是在Glade中设定的Button事件,如何和php接口呢?看下面的例子:
Glade输出的xml

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->

<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">

<glade-interface>

<widget class="GtkWindow" id="wndClose">

  <property name="visible">True</property>

  <property name="title" translatable="yes">Close me</property>

  <property name="type">GTK_WINDOW_TOPLEVEL</property>

  <property name="window_position">GTK_WIN_POS_NONE</property>

  <property name="modal">False</property>

  <property name="resizable">True</property>

  <property name="destroy_with_parent">False</property>

  <property name="decorated">True</property>

  <property name="skip_taskbar_hint">False</property>

  <property name="skip_pager_hint">False</property>

  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>

  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>

  <signal name="destroy" handler="gtk::main_quit"/>

  <child>

    <widget class="GtkButton" id="btnClose">

      <property name="visible">True</property>

      <property name="can_focus">True</property>

      <property name="label">gtk-close</property>

      <property name="use_stock">True</property>

      <property name="relief">GTK_RELIEF_NORMAL</property>

      <property name="focus_on_click">True</property>

      <signal name="clicked" handler="onClickButton"/>

    </widget>

  </child>

</widget>

</glade-interface>

其中有这样一行,表示id为btnClose的button绑定了事件onClickButton

<signal name="clicked" handler="onClickButton"/>



<?php

$glade = new GladeXML(dirname(__FILE__) . '/helloglade.glade');



//这是重点,事件自动绑定

$glade->signal_autoconnect();



//当btnClose被点击的时候就会调用本事件

function onClickButton() {

    echo "button clicked!\r\n";

    Gtk::main_quit();

}



//Start the main loop

Gtk::main();

?>

在上面的例子中,很容易就完成了onClickButton函数的绑定,那么有没有oo一点的写法呢?再看下面的例子:

<?php

// 这里我们使用一个对象来代替function



class MyClass {

    //btnClose被点击的时候会调用本方法

    function onClickButton() {

        echo "MyClass->onClickButton!\r\n";

        Gtk::main_quit();

    }



    function staticMethod() {

        echo "MyClass::staticMethod()\r\n";

    }

}



$glade = new GladeXML(dirname(__FILE__) . '/helloglade.glade');



//这里是重点,自动绑定某个对象的方法

$myClassInstance = new MyClass();

$glade->signal_autoconnect_instance($myClassInstance);



Gtk::main();

?>

到了这一步,个人感觉php-gtk2的开发就比较顺畅了,只是程序的编译输出,目前还没有合适的方法。

顶部
 



当前时区 GMT+8, 现在时间是 2008-11-20 21:37

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - PHP开源项目网 - Archiver - WAP