上次我们在hello glade的时候看到,php-gtk2已经能够根据Glade输出的xml生成窗体了。但是在Glade中设定的Button事件,如何和php接口呢?看下面的例子:
Glade输出的xml
True
Close me
GTK_WINDOW_TOPLEVEL
GTK_WIN_POS_NONE
False
True
False
True
False
False
GDK_WINDOW_TYPE_HINT_NORMAL
GDK_GRAVITY_NORTH_WEST
True
True
gtk-close
True
GTK_RELIEF_NORMAL
True
其中有这样一行,表示id为btnClose的button绑定了事件onClickButton
下面是php实现的onClickButton:
$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一点的写法呢?再看下面的例子:
// 这里我们使用一个对象来代替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的开发就比较顺畅了,只是程序的编译输出,目前还没有合适的方法。