Tutorial Hola Mundo

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

<?php

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.