lunes, 21 de diciembre de 2009

Aplicaciones de Escritorio con PHP - GTK 2


Se pueden realizar aplicaciones de escritorio con PHP, con ayuda de las liberarías GTK+ que son multiplataformas.

GTK+

Es un grupo de liberarías para el desarrollo de interfaces gráficas de usuario (GUI), principalmente para los entornos gráficos GNOME, XFCE y ROX de sistemas Linux.

Inicialmente creado para construir el programa gráfico GIMP, GTK+ es la abreviatura de GIMP toolkit (conjunto de rutinas para GIMP) y es muy usada por los programadores de sistemas Linux junto con Qt en el entorno KDE.
Características:
Es software libre (bajo la licencia LGPL).
Es multiplataforma (Linux, Windows, Macintosh, etc).
Se puede programar en diversos lenguajes como: C, C++, Ada, Perl, Python, PHP, etc...
Es parte importante del proyecto GNU.

Actualmente la última versión es GTK+ 2, con una cantidad importante de mejoras respecto a la primera versión, aunque sin embargo, no es compatible con su primera versión.

GTK+ se basa en tres librerías:
GLib es una librería de bajo nivel estructura básica de GTK+ y GNOME. Proporciona manejo de estructura de datos para C, portabilidad, interfaces para funcionalidades de tiempo de ejecución (runtime) como ciclos, hilos, carga dinámica o un sistema de objetos.
Pango es una librería para el diseño y renderizado de texto, hace hincapié especialmente en la internacionalización. Es el núcleo para manejar las fuentes y el texto de GTK+ 2.
ATK es una librería para crear interfaces con características de una gran accesibilidad muy importante para personas discapacitadas o minusválidas. Pueden usarse útiles como lupas de aumento, lectores de pantalla, o entradas de datos alternativas al clásico teclado o ratón de ordenador.

¿Qué es PHP-GTK?


PHP-GTK es una extensión del lenguaje de programación PHP que interactúa con la librería GTK+, proporcionando un interfaz orientado a objetos a las clases y funciones GTK+ que simplifica la escritura de aplicaciones cliente con interfaces de usuario.

GNOPE (GUI Development with PHP-GTK2 – User Interfaces)
Es un programa que instala todo lo necesario dejando listo para poder desarrollar aplicaciones en PHP-GTK2.


Descargar Gnope.
Descargamos la versión Release para Windows, www.gnope.org/downloads/GnopeSetup-1.0.exe

Lo ejecutamos y lo instalamos

Una vez instalada tendremos la siguiente estructura de archivos:



Listo, el Gnope trae un administrador de aplicaciones en la cual podemos instalar y desinstalar paquetes de PEAR, abrimos la siguiente ventana de aplicaciones y damos clic en el botón: Install/Unistall programs



Clases de GTK

GtkWindow
Es una clase para construir ventanas en una aplicación que va a contener a objetos como etiquetas, botones, cajas de texto, etc. Los cuales se agregan con una el método add.

Ej.
<?php
 
$window = new GtkWindow(); //Creamos un objecto
$window -> connect_object('destroy', array('gtk', 'main_quit'));
// Destroy es la señal que se liga al método  Gtk::main_quit se lanza al cerrar la ventana
 
$window -> set_title('Nuevo'); //El titulo de la ventana
$window -> set_position(Gtk::WIN_POS_CENTER); //Centra la venta en la pantalla
$window -> set_border_width(8); // Asignamos el borde de la ventana
$boton = new GtkButton('Aceptar'); // Creamos un objeto botón
$window -> add($boton);   //lo agregamos a la ventana
$window -> show_all();   //un método heredado que sirve para mostrar todos los elementos
Gtk::main();     //Entra al ciclo principal del programa
 
?>
 
Desde cualquier editor de texto plano, vamos introducir el siguiente código y lo guardamos con el nombre de apli1.phpw y al terminar simplemente damos doble clic, o desde línea de comandos ponemos: c:PHP-Gtk2php-win.exe apli1.phpw
Resultado del código anterior:


Para ver todos los métodos, señales y propiedades de la clase de ventana lo puedes consultar en la siguiente dirección: php-gtk2.de/manual/en/html/gtk/gtk.gtkwindow.html

Clase botón
En el ejemplo anterior utilizamos una clase GtkButton para crear un botón con etiqueta Aceptar..

Sintaxis:

GtkButton (string label, boolean use_underline)

En este siguiente ejemplo vamos a crear un botón de nombre Aceptar en el cual vamos a lanzar un dialogo de mensaje de “Hola mundo” al dar clic.

<?php
class_exists('gtk') or die('Falta habilitar la extensión php-gtk2 en el php.ini' . "");
 
class classButton extends GtkWindow
{ function __construct()
{ parent::__construct();
$this->connect_object('destroy', array('gtk', 'main_quit')); 
$this->set_title(__CLASS__);
$this->set_position(Gtk::WIN_POS_CENTER);
$this->set_default_size(-1, -1);
$this->set_border_width(8); 
$this->add($this->__create_button());
$this->show_all();
}
function __create_button()
{ $button = new GtkButton('Aceptar');
$button->connect('clicked', array($this, 'onClickedButton'), 'Hola mundo!!!');
return $button;
} 
function onClickedButton($button, $text)
{ $owntext = " ".$text." ";
$dialog = new GtkMessageDialog($this, Gtk::DIALOG_MODAL | Gtk::DIALOG_DESTROY_WITH_PARENT,
Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK,$text);
$dialog->run();
$dialog->destroy();
}
}
 
new classButton();
Gtk::main();
 
?> 
Este seria el resultado: 
Dentro de este ejemplo también hacemos referencia a una clase de nombre GtkMessageDialog, para lanzar un mensajes de dialogo. Sintaxis: GtkMessageDialog (GtkWindow parent, GtkDialogFlags flags, GtkMessage type, GtkButtonsType buttons, string message) Donde los parámetros son los siguientes: parent. Es el formulario padre donde se lanza el dialogo. flags. Son banderas que determinan las opciones para la construcción del dialogo: Valor Nombre 1 Gtk::DIALOG_MODAL 2 Gtk::DIALOG_DESTROY_WITH_PARENT 4 Gtk::DIALOG_NO_SEPARATOR Type. Esta constante define el tipo de dialogo. Valor Nombre Descripción 0 Gtk::MESSAGE_INFO Mensaje de información 1 Gtk::MESSAGE_WARNING Mensaje de peligro de error 2 Gtk::MESSAGE_QUESTION Mensaje de pregunta 3 Gtk::MESSAGE_ERROR Mensaje de error Buttons. Especifica los botones para el mensaje de dialogo. Valor Nombre Descripción 0 Gtk::BUTTONS_NONE No muestra ningún boton 1 Gtk::BUTTONS_OK Boton OK. 2 Gtk::BUTTONS_CLOSE Boton Close. 3 Gtk::BUTTONS_CANCEL Boton cancelar 4 Gtk::BUTTONS_YES_NO Botones de Yes y No. 5 Gtk::BUTTONS_OK_CANCEL Botones OK y Cancel. Caja de texto Modificamos el código anterior en el cual vamos agregar un objeto (GtkVBox) que va contener a la caja de texto(GtkEntry) y al botón, en el cual al dar clic va a mostrar el texto de la caja de texto en un mensaje de dialogo. GtkVBox. Es una caja para organizar los elementos en orden vertical. GtkEntry. Permite la entrada de texto, en otras palabras una caja de texto. Ej.
<?php
class_exists('gtk') or die('Falta habilitar la extension php-gtk2 en el php.ini' . "");
 
class classButton extends GtkWindow
{ function __construct()
{ parent::__construct();
$this->connect_object('destroy', array('gtk', 'main_quit')); 
$this->set_title(__CLASS__);
$this->set_position(Gtk::WIN_POS_CENTER);
$this->set_default_size(-1, -1);
$this->set_border_width(8); 
$this->add($this->__create_box());
$this->show_all();
}
function __create_box()
{ $vbox = new GtkVBox(false, 5);
$vbox->set_border_width(5);
 
$entry = new GtkEntry();
$vbox->pack_start($entry, false, false, 0); 
 
$button = new GtkButton('Aceptar');
$button->connect('clicked', array($this, 'onClickedButton'), $entry);
 
$vbox->pack_start($button, false, true);
 
return $vbox; 
} 
 
function onClickedButton($button, $entry)
{ $dialog = new GtkMessageDialog($this, Gtk::DIALOG_MODAL | Gtk::DIALOG_DESTROY_WITH_PARENT,
Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK,$entry->get_text());
$dialog->run();
$dialog->destroy();
}
}
 
new classButton();
Gtk::main();
 
?>
El resultado seria como la siguiente imagen..

No hay comentarios:

Publicar un comentario