Cuando comenzas a aprender un lenguaje de programación, el primer
programa que a menudo de escribe es un programa del tipo 'hola mundo'.
Por eso, para que sea de la misma forma, el primer tutorial en este
manual es solo un tutorial 'hola mundo'.
Esperamos que tengas conocimientos de PHP. El turotial esta diseñado
para dar al usuario una idea de como usar PHP-GTK, como asi también
sus técncias.
En este tutorial nosotros crearemos una simple ventana con un texto
"Hola Mundo" en ella.
Empezaremos por listar el programa y luego explicaremos linea a linea el
programa, dando una introducción a una aplicación PHP-GTK
básica.
Ejemplo 1.1. Listado del progrma Hola Mundo en PHP-GTK
<?php
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
function delete_event()
{
return false;
}
function shutdown()
{
print("Shutting down...\n");
gtk::main_quit();
}
function hello()
{
global $window;
print "Hello World!\n";
$window->destroy();
}
$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
gtk::main();
?>
|
Ejemplo 1.2. Cargando PHP-GTK
<?php
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
?>
|
Esta primeras lineas se fija si las extensiones de PHP-GTK están
ya disponibles y las carga si no lo estan. Este se hace por medio de
dl('php_gtk.dll'); o
dl('php_gtk.so'); sentencias en Windows y Linux
respectivamente.
Ejemplo 1.3. The delete_event() function
<?php
function delete_event()
{
return false;
}
?>
|
La función
delete_event() se registra como un
manejador (vea debajo) para la señal
"delete-event". Devuelve
false,
diciendole a PHP-GTK que ejecute el manejador por defecto de eventos, que
en este caso es el método
destroy() . Si la función
hubiera devuelto
true, PHP-GTK tendria que hacer parado
de ejectuar el manejador para la señal. Esto es importante de conocer
si se necesitariá escribir una función definida por el
usuario en lugar de
destroy()
- por ejemplo, para producir una caja de dialogos confirmando si el
usuario desea cerra la aplicación.
No es necesario estrictamente devolver false para conectar
la señal "delete-event" a el método
destroy() , como lo hace
esta señal en particular devolviendo false por
defecto. Es posible no especificar ningun comportamiento para una
señal como "delete-event" de una ventana, solo
vasta con la señal "destroy" y asi funcionan
correctamente.
Ejemplo 1.4. La función shutdown()
<?php
function shutdown()
{
print("Shutting down...\n");
gtk::main_quit();
}
?>
|
La función
shutdown() es registrada como un
manejador de la señal
"destroy" .
La función imprime el texto y luego llama a la función
estática
"Shutting down...\n" to the
console and then gtk::main_quit.
Ejemplo 1.5. La función hello()
<?php
function hello()
{
global $window;
print "Hello World!\n";
$window->destroy();
}
?>
|
La función
hello() se registra como un manejador
de la señal
"clicked" en el boton. Se hace
global la variable
$window para poder acceder a la
instancia de
GtkWindow creada mas bajo en el script.
Luego se imprime el texto
"Hello World" a la
consola antes de llamar a el método
destroy() sobre la ventana, la que
llama y ejecuta la señal
"destroy"
, y despues llama a la función
shutdown().
Otra forma de que la función hello() pudiera ser
capaz de acceder a la variable $window de la ventana seria
si la variable se pasaria como un
parametro personalizado.
Ejemplo 1.6. Configuando la ventana
<?php
$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
?>
|
Las próximas 4 lineas configuran la ventana. Primeramente creamos una
instancia de
GtkWindow. Una vez hecho esto
correctamente, llamamos a el método
connect() desde la ventanam para
registrar la función
shutdown() como manejador de
la señal
"destroy" y la función
delete_event() como manejadore de la señal
"delete-event". Por último, ponemos un borde
de 10 pixel de ancho
set_border_width() function to
en la instancia de
GtkWindow que antes creamos.
Ejemplo 1.7. Setting up the Button
<?php
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
?>
|
Estas 3 lineas del script son las que crean y configuran un boton.
En la primera linea creamos una instancia del widget
GtkButton. El argumento que se enviá al
constructor es el texto que nosotros queremos que el boton muestre - en
este caso
"Hello World!". Luego llamamos
a el método
connect() para
registrar la función
hello() que definimos
anteriormente , como un manejador de la señal
"clicked". Finalmente agregamos el boton a la
ventana que antes creamos llamando a el método
GtkContainer
add() con nuestra
$window, y luego mostrando todo lo contenido por
$window (y como hijo del widget,
$button) llamando a el método
show_all() , también desde la
instancia de
GtkWindow.
Ejemplo 1.8. La llamada a gtk::main
La linea final del script llama la función estática
gtk::main. Esto le dice a PHP-GTK que terminamos
de crear y configurar nuestra interfase, y que el bucle principal puede
comenzar a escuchar los eventos para ejecutarlo por la interacción
del usuario por eso la funciones que definimos anteriormente pueden ser
llamadas y varias acciones llevadas a cabo en ellas.