glade.pdf

8
software Glade 42 Linux+ 9/2007 [email protected] C uando nos planteamos el desarrollo de apli- caciones software con interfaz gráfica de usu- ario es importante elegir una herramienta que permita al equipo ser productivo en este as- pecto, ya que el diseño y producción de la interfaz grá- fica lleva un tiempo elevado de trabajo. Habitualmente la elección de esta herramienta está condicionada por varios factores como son el lenguaje de programación, la experiencia del equipo con ciertas herramientas, el toolkit gráfico que utilizará la aplicación o la disponibilidad de herramientas en función de la plataforma de desarrollo y de producción. En GNU/Linux contamos con una herramienta muy práctica para el desarrollo de software que requiera de interfaz gráfica como son hoy en día muchas aplicacio- nes standalone y/o cliente-servidor. Esta herramienta nos va a permitir, por ejemplo, ser productivos debido a su facilidad de uso, elegir entre distintos lenguajes de pro- gramación y desarrollar y correr en distintas plataformas. Su nombre es Glade, es software libre y utiliza el toolkit gráfico GTK+. La funcionalidad que diferencia a Glade de otras herramientas similares es el hecho de que genera código XML con la definición de toda la interfaz gráfica que crea el diseñador. Los datos de este fichero se cargan dinámicamente cuando la aplicación se ejecuta, lo que nos permite tener claramente separada la interfaz gráfica de la lógica de negocio. Además, podemos utilizar la misma interfaz con distintos lenguajes de programación sin cambiar nada. Quizá este aspecto nos resulte espe- cialmente práctico si necesitamos desarrollar la misma aplicación en dos lenguajes diferentes o si con el tiempo decidimos cambiar de lenguaje por alguna necesidad específica. La perfecta integración con el entorno de escritorio GNOME es otra de las razones para utilizar Glade si desarrollamos aplicaciones que deban correr en este Glade Arturo Fernández Montoro Conocimientos básicos de programación con inter- faces de usuario Conocimientos básicos de programación en C Conocimientos básicos de GTK+ Lo que deberías saber... Glade es una intuitva aplicación que nos permite desarrollar, a golpe de ratón, interfaces gráficas de usuario para el toolkit gráfico de GTK+, el cual se integra a la perfección con el entorno de escritorio GNOME. Posteriormente podemos utilizar estas interfaces con lenguajes de programación como C/C++, Ruby, Python y Java, entre otros.

Upload: cennio-di-gerardo-castro

Post on 19-Oct-2015

35 views

Category:

Documents


1 download

TRANSCRIPT

  • softwareGlade

    42 Linux+ 9/2007

    softwareGlade

    43www.lpmagazine.org

    linux

    @so

    ftwar

    e.co

    m.p

    l

    Cuando nos planteamos el desarrollo de apli-

    caciones software con interfaz grfica de usu-

    ario es importante elegir una herramienta que

    permita al equipo ser productivo en este as-

    pecto, ya que el diseo y produccin de la interfaz gr-

    fica lleva un tiempo elevado de trabajo. Habitualmente

    la eleccin de esta herramienta est condicionada por

    varios factores como son el lenguaje de programacin, la

    experiencia del equipo con ciertas herramientas, el toolkit

    grfico que utilizar la aplicacin o la disponibilidad de

    herramientas en funcin de la plataforma de desarrollo

    y de produccin.

    En GNU/Linux contamos con una herramienta muy

    prctica para el desarrollo de software que requiera de

    interfaz grfica como son hoy en da muchas aplicacio-

    nes standalone y/o cliente-servidor. Esta herramienta nos

    va a permitir, por ejemplo, ser productivos debido a su

    facilidad de uso, elegir entre distintos lenguajes de pro-

    gramacin y desarrollar y correr en distintas plataformas.

    Su nombre es Glade, es software libre y utiliza el toolkit

    grfico GTK+. La funcionalidad que diferencia a Glade

    de otras herramientas similares es el hecho de que genera

    cdigo XML con la definicin de toda la interfaz grfica

    que crea el diseador. Los datos de este fichero se cargan

    dinmicamente cuando la aplicacin se ejecuta, lo que

    nos permite tener claramente separada la interfaz grfica

    de la lgica de negocio. Adems, podemos utilizar la

    misma interfaz con distintos lenguajes de programacin

    sin cambiar nada. Quiz este aspecto nos resulte espe-

    cialmente prctico si necesitamos desarrollar la misma

    aplicacin en dos lenguajes diferentes o si con el tiempo

    decidimos cambiar de lenguaje por alguna necesidad

    especfica.

    La perfecta integracin con el entorno de escritorio

    GNOME es otra de las razones para utilizar Glade si

    desarrollamos aplicaciones que deban correr en este

    GladeArturo Fernndez Montoro

    Conocimientos bsicos de programacin con inter-faces de usuario

    Conocimientos bsicos de programacin en C Conocimientos bsicos de GTK+

    Lo que deberas saber...

    Glade es una intuitva aplicacin que nos permite desarrollar, a golpe de ratn, interfaces grficas de usuario para el toolkit grfico de GTK+, el cual se integra a la perfeccin con el entorno de escritorio GNOME. Posteriormente podemos utilizar estas interfaces con lenguajes de programacin como C/C++, Ruby, Python y Java, entre otros.

  • softwareGlade

    42 Linux+ 9/2007

    softwareGlade

    43www.lpmagazine.org

    escritorio. No obstante, las aplicaciones

    basadas en Glade slo necesitan GTK+ con

    independencia del entorno de escritorio, es

    decir, cualquier aplicacin desarrollada con

    Glade puede correr, por ejemplo, en KDE,

    WindowMaker o XFCE, siempre y cuando

    tengamos instaladas las libreras necesarias

    de GTK+.

    Si programamos en C/C++ en Linux uti-

    lizando el popular IDE Anjuta, la ltima ver-

    sin del mismo integra Glade, de forma que

    no es necesario que usemos dos programas

    distintos para escribir nuestras aplicacio-

    nes.

    Dado que la mejor forma de conocer

    Glade es trabajar con l, comenzaremos

    viendo cmo instalarlo en nuestro PC.

    InstalacinAntes de realizar la instalacin debemos

    decidir con qu versin de Glade vamos a

    trabajar. Actualmente existen dos versiones

    diferenciadas listas para produccin: Glade2

    y Glade3. A nivel interno son muy diferen-

    tes, ya que la versin 3 se ha reescrito par-

    tiendo de cero y el cdigo es completamente

    nuevo. Funcionalmente son muy parecidas

    con la excepcin de que la nueva versin

    ya no genera cdigo, slo la definicin en

    XML de la interfaz. En versiones anteriores

    era posible generar directamente cdigo en

    el lenguaje seleccionado, que los progra-

    madores utilizaban para escribir el resto

    de la aplicacin. Sin embargo, en la nueva

    versin slo es posible generar la definicin

    en XML, que posteriormente los programa-

    dores utilizarn junto a la librera libglade

    para cargar las interfaces en tiempo de ejecu-

    cin.

    Para la mayora de las distribuciones de

    Linux existen paquetes binarios para reali-

    zar la instalacin de la versin 2 de Glade,

    sin embargo, no es tan comn encontrar

    paquetes de la versin 3. Por ejemplo, la

    ltima versin estable liberada de Debian

    (4.0 alias Etch) no dispone de paquetes para

    Glade 3, tampoco los incluye la versin

    Edgy de Ubuntu. Para realizar la instalacin

    desde estos paquetes binarios podemos

    utilizar la interfaz grfica de aplicaciones

    como Sypnatic o la lnea de comandos. Por

    ejemplo, en el caso de Debian ejecutaramos

    como usuario root:

    # apt-get install glade

    Y en el caso de Ubuntu:

    $ sudo apt-get install glade

    Tambin encontramos paquetes para otras

    distribuciones como Fedora o SUSE. Por

    ejemplo, la distro Fedora Core 6, incluye por

    defecto la versin 2 de Glade. La instalacin

    desde los binarios tiene la ventaja de que el

    sistema de instalacin detectar las depen-

    dencias necesarias e instalar los paquetes

    que proceda de forma automtica.

    No obstante, si deseamos instalar Glade

    desde los fuentes podemos hacerlo acce-

    diendo al sitio web de Glade, descargarnos

    los mismos y realizar la compilacin de for-

    ma manual. De esta forma podemos elegir

    la versin que deseemos.

    En primer lugar deberemos instalar el

    software del que depende Glade. Si utili-

    zamos GNOME podemos obviar este paso,

    ya que tendremos instalado prcticamente

    todo, como mucho deberemos instalar las

    libreras de desarrollo necesarias para la

    compilacin. Glade require el siguiente soft-

    ware:

    Libreras de GTK+ (mnimo versin 2.10)

    GLib

    Pango

    Atk

    libxml (mnimo versin 2.4.1)

    Este software puede encontrarse tambin

    como paquetes binarios en nuestra distri-

    bucin de Linux. Antes de proceder a ins-

    talarlo, podemos comprobar si ya lo tene-

    mos instalado, dado que se trata de libre-

    ras comunmente utilizadas por muchas

    de las aplicaciones ms populares para

    Linux.

    A continuacin veremos cmo instalar

    la versin 3.2 de Glade que es la ltima

    estable liberada hasta el momento y es la

    que utilizaremos para ilustrar los ejemplos

    de este artculo.

    En primer lugar nos descargaremos el

    cdigo fuente:

    $ wget http://ftp.gnome.org/pub/GNOME

    Listado 1. Programa en C que genera la interfaz grfica desarrollada

    previamente con Glade

    1 int main(int argc, char *argv[])

    {

    gtk_init(&argc, &argv);

    glade_init();

    6 xml = glade_xml_

    new("hello.glade",

    "window1", NULL);

    8 glade_xml_signal_

    autoconnect(xml);

    gtk_main();

    return 0;

    11 }

    Figura 1. Iniciando Glade

    Qu es Glade Cmo construir interfaces grficas con

    Glade A desarrollar aplicaciones para GTK+

    con interfaz grfica

    En este artculo aprenders...

  • 44

    softwareGlade

    Linux+ 9/2007 45

    softwareGlade

    www.lpmagazine.org

    /sources/glade3/3.2/glade3-

    3.2.0.tar.gz

    Seguidamente descromprimiremos el fichero

    tarball descargado:

    $ tar -zxvf glade3-3.2.0.tar.gz

    $ cd glade3-3.2.0

    Por ltimo pasaremos a compilar e instalar:

    $ ./configure

    $ make

    # make install

    Podemos comprobar la correcta instalacin

    de Glade accediendo a la correspondiente

    opcin de men de nuestro entorno de es-

    critorio, habitualmente en Grficos en GNO-

    ME, o utilizando la lnea de comandos,

    ejecutando:

    $ glade-3

    La interfazGlade presenta una interfaz muy intuitiva

    y fcil de usar gracias a su sistema de drag

    & drop (arrastrar y soltar) que nos permite

    directamente seleccionar un componente

    y posicionarlo en la rea de trabajo.

    La interfaz grfica de Glade se encuentra

    divida en las siguientes reas:

    Men: Nos da acceso a las funcionali-

    dades de Glade referentes a los pro-

    yectos, ficheros, edicin, tipos de vistas

    y ayuda.

    rea de diseo: Es el espacio utilizado

    para construir la interfaz grfica. A esta

    rea de trabajo arrastraremos los dife-

    rentes elementos de la interfaz.

    Paleta: Aqu encontramos todos los

    elementos necesarios para contruir

    una interfaz grfica que Glade pone

    a nuestra disposicin, como por ejem-

    plo, distintos tipos de botones, cajas

    de texto, elementos desplegables (com-

    bos), etiquetas y barras de desplaza-

    miento.

    Inspector: Visualiza informacin sobre

    los elementos de la interfaz que esta-

    mos utilizando en nuestro proyecto.

    Editor de propiedades: Aqu fijaremos

    las propiedades de cada elemento de

    la interfaz y podremos aadir lo necesa-

    rio para realizar la conexin a travs de

    eventos.

    Para trabajar con Glade es necesario que nos

    familiaricemos con una serie de conceptos de

    GTK+ que debemos tener en cuenta a la hora

    del desarrollo de interfaces. A continuacin

    veremos dichos conceptos.

    WidgetsPodemos definir un widget como un elemento

    de la interfaz grfica de usuario. Un botn,

    una caja de texto, un desplegable y una eti-

    queta son ejemplos de widgets.

    GTK+ nos ofrece un rico conjunto de wid-

    gets, adems de los mencionados contamos,

    entre otros, con barras de scroll horizontal

    y vertical, pestaas de separacin, diferentes

    tipos de botones, botones de seleccin mlti-

    ple y botones de nica seleccin.

    ContenedoresPor otro lado, GTK+ utiliza tambin el

    concepto de contenedores que son elemen-

    tos de interfaz que sirven para agrupar

    y empaquetar a los widgets. Los contenedo-

    res son necesarios en GTK+ porque todos

    los widget que forman parte de la interfaz

    deben encontrarse empaquetados. Esta tc-

    nica de empaquetado, permite por ejemplo,

    que para el programador sea transparente

    la adaptacin del tamao de los widgets

    como consecuencia de un redimensiona-

    miento por parte del usuario, ya que, la

    Figura 2. Diferentes cuadros de dilogo que podemos crear con Glade

    Figura 3. Seleccionando un icono para un botn

  • 44

    softwareGlade

    Linux+ 9/2007 45

    softwareGlade

    www.lpmagazine.org

    adaptacin es automtica gracias a esta tc-

    nica.

    Bsicamente, tenemos tres tipos de conte-

    nedores en GTK+:

    Ventanas: Son parte fundamental de

    una aplicacin. Es el marco donde se

    situan otros contenedores y otros wid-

    gets a su vez. Como mnimo una apli-

    cacin debe contener una ventana.

    Caja vertical (Vertical box): Permite

    agrupar widgets con una orientacin

    vertical. Es prctico, por ejemplo, cuan-

    do queremos colocar una etiqueta y al

    lado una caja de texto.

    Caja horizontal (Horizontal box): Similar

    al anterior pero con orientacin hori-

    zontal. Nos permite agrupar elementos

    uno debajo del otro.

    Debemos tener en cuenta que cuando un

    widget se sita en un contenedor, el widget

    ocupa todo el espacio que le hemos dado al

    contenedor.

    Utilizando diferentes combinaciones

    entre contenedores podemos llegar a crear

    una compleja y completa interfaz de usua-

    rio.

    Tipos de widgets y contenedoresA continuacin veremos una clasificacin

    de widgets y contenedores basndonos en la

    organizacin que nos da Glade en la venta-

    na Paleta, dando una pequea descripcin

    sobre los mismos. Nos ceiremos a los ms

    habituales, aunque como podremos com-

    probar en la interfaz de Glade, existen otros

    a nuestra disposicin.

    Alto nivel (Top level)

    Ventana (Window): Se trata del conte-

    nedor bsico y representa una ventana

    tpica de aplicacin. Utilizaremos este

    contenedor para alojar la mayora de

    los widgets.

    Cuadro de dilogo (Dialog box): Con-

    tenedor que se utiliza para interactuar

    con el usuario requiriendo su interven-

    cin.

    Acerca de (About box): Otro contenedor

    para crear el tpico mensaje de "Acerca

    de...". Tambin es posible crear este

    dilogo utilizando el contenedor ante-

    rior, sin embargo, la ventaja del About

    box es que ya tenemos unos widgets

    bsicos insertados para crear el mensaje.

    Seleccin de color (Color Selection Dia-

    log): Este cuadro de dilogo nos per-

    mite seleccionar un color de una paleta

    dada.

    Seleccin de ficheros (File Chooser Dialog):

    Se utiliza para mostrar al usuario el siste-

    ma de ficheros y que el mismo pueda

    seleccionar uno o varios ficheros.

    Seleccin de fuentes (Font Selection Dia-

    log): A travs del mismo podemos el usu-

    ario puede seleccionar una fuente (tipo

    de letra) instalada en el sistema.

    Otros widgets dentro de este grupo son los

    cuadro de dilogos que permiten seleccionar

    el dispostivo de entrada (Input Dialog) y crear

    un mensaje (Message Dialog).

    Contenedores (Containers)

    Caja horizontal (Horizontal box): Este es

    uno de los contenedores principales de

    Glade que nos permite situar dentro del

    mismo diferentes tipos de widgets hori-

    zontalmente.

    Caja vertical (Vertical box): Al igual que el

    anterior tambin es un contenedor bsico

    que nos permite la colocacin vertical de

    los widgets.

    Tabla (Table): Contenedor que crea filas

    y columnas. Se puede utilizar teniendo

    en cuenta que es una combinacin de los

    dos anteriores.

    Cuaderno (Notebook): Permite crear va-

    rias pestaas dentro de una ventana.

    Frame: Tipo de contenedor que nos da la

    opcin de asociarle una etiqueta.

    Barra de men (Menu Bar): Tpica barra

    de men de aplicacin.

    Barra de herramientas (Tool bar): Permite

    aadir iconos.

    Ventana con scroll (Scrolled window): Ven-

    tana que permite realizar desplazamien-

    tos (scroll).

    Visualizacin y control (Control and Display)

    Botn (Button): Tpico botn dnde po-

    demos seleccionar, entre otras propie-

    dade, un icono. Existen varios predefe-

    nidos, como son, por ejemplo, el tick de

    OK y o la cruz de Cancelar.

    Botn de comprobacin (Check button): Bo-

    tn que tiene dos estados, marcado y sin

    marcar.

    Botn de seleccin (Radio button): Permite

    seleccionar una opcin u otra, es mutua-

    mente excluyente.

    Botn de seleccin de ficheros (File Choo-

    ser button): Da acceso a un cuadro de di-

    logo para seleccionar uno o varios fiche-

    ros del sistema.

    Imagen (Image): Permite insertar una

    imagen desde un fichero.

    Etiqueta (Label): Posibilita la insercin de

    texto en tiempo de diseo. Se utiliza para

    textos que el usuario no pueda modificar.

    Caja de texto (Text entry): Da la opcin

    de insertar texto al usuario, sirve como

    entrada de datos.

    Barra horizontal de scroll (Horizontal

    scrollball): Barra que permite realizar

    scroll horizontal.

    Barra vertical de scroll (Vertical scrollball):

    Similar a la anterior pero para scroll ver-

    tical.

    Figura 4. Conversor

  • 46

    softwareGlade

    Linux+ 9/2007

    Desplegable (Combo box): Muestra al

    usuario un desplegable con varias opcio-

    nes para que el usuario pueda seleccio-

    nar una.

    Barra de progreso (Progress bar): til

    para mostrarle al usuario el progreso de

    una accin.

    Calendario (Calendar): Muestra un calen-

    dario.

    rea de dibujo (Drawing area): Marca

    un rea para que el usuario pueda dibujar.

    Otro grupo son los GTK+ obsolete que re-

    ferencian a widgets obsoletos de versiones

    anteriores, pero que se muestran para ga-

    rantizar la compatibilidad con proyectos

    antiguos que tengamos desarrollados.

    ProyectosGlade utiliza el concepto de proyecto para

    agrupar todos los elementos de la interfaz

    que estamos diseando y que habitulamen-

    te corresponde a un programa. Adems, se

    genera un fichero XML por proyecto. Para

    comenzar a trabajar el primer paso es crear

    un proyecto.

    Podemos guardar, borrar y editar pro-

    yectos de forma similar a como trabajan los

    IDE's de desarrollo. Desde el men de Gla-

    de tenemos acceso a la opcin Proyectos.

    Seales y eventosGTK+ est orientado a eventos, por lo tan-

    to es necesario comprender este concepto

    para utilizar Glade. Una aplicacin GTK+

    siempre estar esperando que un evento

    ocurra. Un evento es la consecuencia de

    una accin que se realiza sobre un elemen-

    to de la interfaz y suele ser el usuario quin

    provoca un dicha accin.

    Las seales son mensajes que emite un

    elemento de la interfaz cuando ocurre un

    evento. Por ejemplo, si un usuario pulsa un

    botn se producir el evento botn_pulsado

    y l mismo emitir la seal click.

    Bien, ya tenemos seales y eventos pero

    nos queda responder a los mismos para

    lograr la interaccin entre la aplicacin

    y el usuario. Para ello necesitaremos mane-

    jadores de seales que nos ayuden a repon-

    der a los mismos. Estos se caracterizan por

    utilizar una funcin o mtodo callback, que

    contiene una serie de instrucciones que se

    ejecutarn para responder al evento.

    En GTK+, para responder a un evento

    es necesario indicar que seales lanzar un

    widget y que funcin o mtodo callback debe

    ejecutarse como respuesta. Este callback ser

    indicado por el correspondiente manejador

    de seales.

    Lenguajes de programacinDado que Glade genera un fichero XML con

    la descripcin de la interfaz y que gracias

    a libglade podemos cargar en tiempo de eje-

    cucin dicha interfaz, podemos utilizar dis-

    tintos lenguajes para escribir aplicaciones

    GTK+. De hecho, podemos reutilizar la de-

    finicin de la interfaz con varios lenguajes

    de programacin.

    Actualmente es posible combinar Glade

    con los siguientes lenguajes:

    C: GTK+ est escrito en C, as pues, ste

    es el lenguaje nativo.

    C++: Existen bindings para este lenguaje,

    la librera oficial se llama gtkmm.

    C#: En GNU/Linux utilizando la tecno-

    loga Mono.

    Java: El lenguaje orientado a objetos de-

    sarrollado por Sun Microsystems.

    Python: Uno de los lenguajes interpreta-

    dos estrella.

    Pike: Lenguaje interpretado de sintaxis

    muy similar a C.

    Ruby: Famoso por el framework web Ruby

    on Rails.

    Haskell: Se caracteriza por su puramente

    funcional.

    Objective Caml: Lenguaje orientado a ob-

    jetos y multiplataforma.

    Perl: Un clsico de la programacin.

    Schem: Dialecto de LISP.

    Para utilizar un lenguaje diferente a C nece-

    sitaremos utilizar un binding, es decir, una

    librera intermedia que encapsula el acceso

    a una librera escrita en un lenguaje desde

    otro. Los lenguajes anteriormente disponi-

    bles disponen de estos bindings que suelen

    ser libreras, las cuales podemos encontrar

    empaquetadas en formato binario para la

    mayora de las distribuciones de Linux. Por

    ejemplo, en el caso de Python contamos con

    PyGTK, en el caso de Ruby disponemos de

    Ruby GNOME 2.

    A continuacin veremos cmo instalar,

    por lnea de comando, los paquetes necesa-

    rios para cada binding en funcin del len-

    guaje, como ejemplo nos ceiremos a la dis-

    tribucin Debian Etch y a los lenguajes Ru-

    by, Perl y Python:

    # apt-get install libgtk2-ruby

    # apt-get install libgtk2-perl

    # apt-get install python-gtk2

    La eleccin de un lenguaje u otro depender

    de nuestras necesidades, aunque debemos

    tener en cuenta que C es el lenguaje nativo

    y por lo tanto la integracin ser mayor y no

    es necesario instalar bindings.

    Un ejemplo prcticoEn general, el proceso de desarrollo de aplica-

    ciones GTK+ utilizando Glade, consta de las

    siguientes fases:

    Figura 5. Detalle del rbol de widgets del proyecto de software libre gtkPod, realizado con Glade

  • 48

    softwareGlade

    Linux+ 9/2007 49

    softwareGlade

    www.lpmagazine.org

    Diseo de la interfaz de usuario con

    Glade.

    Generacin del XML con la definicin de

    la interfaz.

    Desarrollo del cdigo de la aplicacin

    con la lgica de negocio.

    Desarrollo del cdigo de la aplicacin

    que interacta con la interfaz grfica.

    Si el lenguaje es distinto a C, no olvidemos

    que necesitamos las libreras que hacen de

    binding.

    Vamos a ver un sencillo ejemplo para

    disear una aplicacin que realiza una con-

    versin de euros a libras esterlinas y vice-

    versa. La interfaz de nuestra aplicacin con-

    tendr dos etiquetas, dos botones y dos cajas

    de textos dnde el usuario podr poner los

    importes para la conversin.

    En primer lugar debemos seleccionar los

    contenedores que vamos a utilizar, en nuestro

    caso el primer contenedor ser una ventana,

    as pues hacemos click sobre este widget del

    grupo Toplevels de la paleta y vermos cmo

    aparece la ventana en cuestin. El segundo

    contenedor que agrupar al resto es una caja

    vertical, cuando pichemos sobre la misma,

    Glade nos preguntar sobre el nmero de

    columnas, le indicamos que vamos a utilizar

    tres. Seguidamente aadiremos otra caja

    horizontal con dos columnas, dnde una de

    ellas nos servir para aadir la etiqueta con

    el valor EUR y otra la utilizaremos para

    la caja de texto dnde el usuario introdu-

    cir le importe que desee convertir. En la

    parte central de la ventana aadiremos una

    caja vertical que contendr dos botones di-

    ferentes, uno para realizar la conversin de

    euros a libras y otro para convertir de libras

    a euros. Ya slo nos queda aadir otra caja

    horizontal con dos columnas con una caja

    de texto y una etiqueta de manera similar

    a la anterior.

    Resumiendo, tenemos los siguientes

    widgets:

    Una ventana utilizada como contenedor

    principal.

    Una caja horizontal con tres columnas.

    Dos cajas horizontales con una etiqueta

    y una caja de texto cada una.

    Una caja vertical con dos filas, cada una

    con un botn.

    El siguiente paso es fijar las propiedades

    de los widgets a travs de la ventana Pro-

    piedades. En nuestro ejemplo, slo fijaremos

    el texto de las etiquetas y el de los botones.

    Para ello accedemos a la pestaa General de

    la ventana propiedades de cada uno de es-

    tos widgets y escribimos el texto en cuestin.

    Cada vez que hacemos click sobre un widget

    se activa la ventana de propiedades corres-

    pondiente al mismo.

    Respecto al empaquetado mantedremos el

    que viene por defecto, y veremos que ajus-

    tando el tamao de la ventana lograremos

    ver los widgets de forma proporcional.

    El resultado final puede verse en la

    Figura 4.

    Ya slo nos queda fijar las propieda-

    des relativas a las seales para los botones

    que est relacionado con la lgica de nego-

    cio de la aplicacin y escribir la parte que

    interacta con la interfaz en el lenguaje

    que hayamos elegido. En nuestro ejemplo

    del conversor fijaremos tres seales en la

    interfaz:

    En la ventana principal, seleccionamos

    la pestaa Seales y aadimos la seal

    delete_event. A esta seal le asignaremos

    el manejador llamado gtk_main_quit. El

    objetivo es que cuando el usuario pulse

    sobre el botn de cierre, la aplicacin

    termine su ejecucin.

    En el primer botn aadiremos la seal

    clicked y le asociamos el manejador on_

    button_clicked. Este ser el nombre de la

    rutina callback que deberemos escribir

    y que se ejecutar como respuesta al pul

    sado del botn.

    De forma similar al anterior procede-

    mos para el otro botn. En este caso

    cambiaremos el nombre del maneja-

    dor, puesto que ste ser diferente.

    Por ejemplo, escribimos el nombre

    on_button2_clicked.

    En este punto estamos en disposicin de

    escribir el cdigo que interacta con nues-

    tra interfaz creada con Glade. A modo de

    ejemplo, utilizaremos el lenguaje C por ser

    el nativo de GTK+ y la librera libglade que

    nos permite cargar en tiempo de ejecucin

    los elementos de nuestra interfaz.

    En primer lugar debemos incluir las

    siguientes lneas en nuestro programa:

    #include

    #include

    static GladeXML *xml;

    La ltima lnea es la declaracin de la varia-

    ble que representa a la interfaz. La hemos

    declarado como global por simplicidad

    para poderla utilizar directamente en las

    rutinas callbacks.

    La funcin principal de nuestro progra-

    ma contendr el siguiente cdigo (Lista-

    do 1).

    En la lnea 6 cargamos el fichero gene-

    rado por Glade y que contiene la interfaz.

    Seguidamente utilizamos una funcin pa-

    ra conectar automtica y directamente las

    Listado 2. Funcin callback que se ejecuta como respuesta al evento que sucede

    cuando se pulsa un botn

    void on_button_clicked(GtkButton *button, gpointer user_data)

    {

    GtkWidget *entry1;

    GtkWidget *name_entry;

    GtkEntry *txt;

    GtkEntry *txt2;

    char *cad = NULL;

    txt = (GtkEntry *) glade_xml_get_widget(xml, "entry1");

    cad = gtk_entry_get_text (txt);

    /*

    Obviamos la transformacin de euros a libras.

    El lector interesado puede realizar la implementacin

    en este punto.

    */

    txt2 = (GtkEntry *) glade_xml_get_widget(xml, "entry2");

    gtk_entry_set_text (txt2, cad);

    }

    GTK: Gimp ToolKit. IDE: Entorno Integrado de Desarrollo.

    Acrnominos y abreviaturas

  • 48

    softwareGlade

    Linux+ 9/2007 49

    softwareGlade

    www.lpmagazine.org

    seales con sus correspondientes maneja-

    dores.

    Ahora debemos escribir las funciones

    callback, como ejemplo mostraremos slo

    una, que ser la encargada de leer el valor

    de la caja de texto dnde se introduce el va-

    lor de los euros, realizar la conversin a li-

    bras y mostrar el correspondiente valor en la

    otra caja de texto. El cdigo correspondiente

    sera el siguiente (Listado 2).

    Obviamente debemos tener instaladas

    las correspondientes libreras para poder

    realizar la compilacin y ejecucin de este

    ejemplo. En concreto necesitamos las librer-

    as de GTK+ y libglade incluyendo sus res-

    pectivas libreras dependientes. Adems, es

    necesario tanto las libreras de desarrollo co-

    mo las de ejecucin (runtime). Superado este

    paso ya slo nos queda compilar nuestro

    programa ejemplo:

    $ gcc -export-dynamic

    -o conversor conversor.c

    `pkg-config --cflags --libs

    libglade-2.0`

    Finalmente, podemos ejecutarlo y ver el resul-

    tado, para ello lo lanzaremos desde la lnea

    de comandos:

    $ ./conversor

    ConclusionesGlade es una herrramienta prctica y pro-

    ductiva para escribir interfaces de usuario

    utilizando GTK+. La curva de aprendizaje

    no es elevada, gracias a su intuitiva inter-

    faz.

    Una de las claras ventajas de Glade es

    la generacin del fichero XML que permite

    cargar la interfaz grfica en tiempo de eje-

    cucin desde distintos lenguajes de progra-

    macin.

    Distintos proyectos de software libre

    utilizan Glade para generar las interfaces

    de usuario, un ejemplo es gtkPod el popu-

    lar programa que emula al iTunes de Apple

    y que permite sincronizar el iPod con nues-

    tro PC bajo GNU/Linux.

    Si a todo esto sumamos que Glade es

    multiplataforma y que es software libre, es-

    tamos ante una complemento ideal para el

    desarrollo de software con interfaz de usua-

    rio, especialmente en GNU/Linux y para

    la integracin con el entorno de escritorio

    GNOME.

    Figura 6. Detalle de la interfaz de gtkPod

    Sitio oficial de Glade http://glade.gnome.org Sitio web de GTK+ http://www.gtk.org El popular gestor de escritorio

    GNOME http://www.gnome.org Librera binding para C++

    de GTK+ http://www.gtkmm.org Sitio web de PyGTK http://www.pygtk.org Ruby y GTK+ http://ruby-gnome2.sourceforge.jp

    Referencias en Internet

    Arturo Fernndez Montoro es Ingeniero Tcnico en Informtica de Gestin. Est especializado en desarrollo web y software libre. Colabora como autor freelance en varias revistas nacionales e internaciona-les sobre GNU/Linux.

    Sobre el autor

    Figura 7. Sitio oficial de Glade