• Publicidad

Crear interfaz con GTK

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Crear interfaz con GTK

Notapor explorer » 2011-08-31 17:46 @782

Yo quitaría todo lo que tiene que ver con Perl, desinstalando todo, borrar todas las variables de entorno relativas a Perl y Gtk, y dejar a %PATH% a como estaba. Olvidarte de todo lo que tenga que ver con el comando cpan y cpanplus, y solo usar el PPM para instalar cosas.

Y luego me bajaría la última versión de ActiveState, y luego, con el PPM (repasa mi guía), y bajar el Bundle. Si con eso, no se consigue instalar el Gtk2, mal vamos... entonces, habrá que enviar un correo a los de ActiveState.

En esta página, se demuestra que Bundle::Gnome2, en su versión 0.12 del año 20005, está disponible hasta para la última versión del ActivePerl (la 5.14).

Actualización: Buscando Gtk2, vemos que no hay Gtk2 (no hay paquete ppm para él). Viendo el log, parece que es tan tonto de que no está instalado el paquete ExtUtils::PkgConfig. Y ese paquete solo está disponible para Linux...

Mala suerte...

(P.D. Yo no uso Windows desde hace años, así que poco puedo ayudarte.)

O... usar SOLO CamelBox.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Crear interfaz con GTK

Notapor pvaldes » 2011-08-31 18:02 @793

y digo yo... si tienes que escribir a los creadores del software, y esperar la respuesta, y arreglar el lío que tienes con los dos perl mezclados, y buscar los módulos esparcidos aquí y allá... ¿no saldrías del paso antes tirando de un live-cd de Linux?

Copias tu script de perl a un pendrive, metes el live-cd en el cdrom, arrancas tu ordenador y tendrás un Linux funcional, lento pero con Perl preinstalado, luego le dices a cpan que busque el Gtk2 en Internet, lo descargué y lo instalé automáticamente por ti (o sea escribes en un terminal: cpan install Gtk2) y ya puedes trabajar con él, problema resuelto.

Cuando acabes de trabajar con el programa lo vuelves a grabar al pendrive, cierras y sacas el disco y al reiniciar de nuevo estarás en Windows y nadie sabrá nunca que has usado un Linux para nada.

Es que esto empieza a parecer masoquismo ya...
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580

Re: Crear interfaz con GTK

Notapor Txemaracas » 2011-08-31 18:25 @809

Si pero el programa que estoy haciendo tiene que funcionar en Windows con lo cual el módulo tiene que estar instalado en Windows para que pueda funcionar el programa, ¿no?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor explorer » 2011-08-31 20:15 @885

Si intenta cpan install Gtk2, estará obligado a tener instaladas antes las bibliotecas (código binario y código fuente) que necesita Gtk2 para compilarse (no es un módulo escrito en puro Perl). Necesitará Glib, Pango y Cairo, por lo menos. Y que tenga instalado un compilador de C, con un make, claro.

Es muchíiiisimo más cómodo usar el sistema de gestión de paquetes de su sistema operativo, que le ofrecerá una versión ya compilada de todo esto.

Por ejemplo: yo estoy ahora mismo en un OpenSuse v11.4 i586. Entonces...

1.- Arranco el panel de control YaST2 para la gestión de software (menú KDE, Máquina, Añadir/quitar programas).

2.- Me pide la contraseña de root. La pongo y sale el programa que gestiona todo el software en el sistema.

3.- En la cajita de búsqueda, pongo "Gtk2" y pulso en el botón Buscar.

4.- En el montón de resultados que salen, aparece varios paquetes "perl-Gtk2". Selecciono el más básico, el que se llama solo "perl-Gtk2" (los demás añaden funcionalidades que ahora no necesito). Lo marco para instalar.

5.- Repito la búsqueda con la palabra "glade". Me sale un "glade3". Lo marco también para instalar.

6.- Al pulsar el botón de Instalar, el programa selecciona de forma automática los paquetes
libgladeui-1.9
perl-Cairo
perl-Glib
perl-Pango
perl-ExtUtils-Depends
perl-ExtUtils-PkgConfig

7.- Después de instalarlos, me falta un paquete importante: el Gtk2::GladeXML. Si fuera un módulo puro Perl, lo instalaría con el cpanp (CPANPLUS), pero no lo es. Bueno, pues buscando un poco en el servicio Build de OpenSuse, lo encuentro. Lo bajo y lo instalo.

Y ya está todo instalado. Falta por hacer alguna prueba. Entramos en /usr/share/doc/packages/perl-Gtk2-GladeXML/examples/, que es donde me ha dejado los ejemplos de Gtk2::GladeXML, y allí ejecuto los programas Perl que trae. Por ejemplo, el hello-world.pl:
Imagen

Luego he arrancado el glade-3 y he diseñado un ejemplo muy sencillo, como el indicado en el manual en español, enlazado antes:
Imagen

Lo guardo y me genera un archivo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0"?>
  2. <glade-interface>
  3.   <!-- interface-requires gtk+ 2.20 -->
  4.   <!-- interface-naming-policy project-wide -->
  5.   <widget class="GtkWindow" id="ventana_principal">
  6.     <property name="title" translatable="yes">Mi primer programa</property>
  7.     <property name="resizable">False</property>
  8.     <property name="window_position">center</property>
  9.     <signal name="destroy" handler="on_ventana_principal_destroy"/>
  10.     <child>
  11.       <widget class="GtkVBox" id="vbox1">
  12.         <property name="visible">True</property>
  13.         <property name="orientation">vertical</property>
  14.         <property name="homogeneous">True</property>
  15.         <child>
  16.           <widget class="GtkLabel" id="label1">
  17.             <property name="visible">True</property>
  18.             <property name="label" translatable="yes">&#xA1;&#xA1;&#xA1;Hola Mundo!!!</property>
  19.             <property name="width_chars">20</property>
  20.             <property name="single_line_mode">True</property>
  21.           </widget>
  22.           <packing>
  23.             <property name="position">0</property>
  24.           </packing>
  25.         </child>
  26.         <child>
  27.           <widget class="GtkLabel" id="label2">
  28.             <property name="visible">True</property>
  29.             <property name="label" translatable="yes">Este es mi primer programa</property>
  30.             <property name="width_chars">20</property>
  31.             <property name="single_line_mode">True</property>
  32.           </widget>
  33.           <packing>
  34.             <property name="position">1</property>
  35.           </packing>
  36.         </child>
  37.       </widget>
  38.     </child>
  39.   </widget>
  40. </glade-interface>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora es cuando creamos el programa Perl, que he hecho copiando y pegando partes de dos ejemplos del manual:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.    
  4. ### Este modulo obtiene la información de la interfaz hecha en glade
  5. ### basándose en el archivo XML generado por este (le hace un parser).
  6. ### Los parámetros obtenidos se los pasa al módulo Gtk2.
  7.  
  8. use Gtk2::GladeXML;
  9.  
  10. ### Módulo que recibe los parámetros obtenidos por Gtk2::GladeXML
  11. ### y genera las ventanas basándose en ellos.
  12.  
  13. use Gtk2 -init;
  14.  
  15. ### Declaro las variables que usaré en el programa
  16. ### Si programas en Perl ya sabes a que me refiero ;-)
  17.  
  18. my($programa, $ventana_principal);
  19.  
  20. ### Le estoy indicando la ruta (ubicación) donde se encuentra el archivo XML
  21. ### generado por Glade, del cual Gtk2::GladeXML analizará y extraerá
  22. ### los parámetros más importantes y se los facilitará al Gtk2. En base a esos
  23. ### parámetros se crea un objeto al que llamé "programa" el cual contendrá
  24. ### todos los widgets del programa e interactuará con este mediante los métodos
  25. ### predefinidos que contendrá cada widget.
  26.  
  27. $programa = Gtk2::GladeXML->new('hello.glade');
  28.  
  29. ### Ahora estoy cargando la ventana principal al hacer esto
  30. ### esto se crea un objeto "ventana_principal" el cual nos permite
  31. ### interactuar con la ventana mediante métodos ya predefinidos.
  32.  
  33. $ventana_principal = $programa->get_widget('ventana_principal');
  34.  
  35. ### Está línea lo que hace es levantar o permitir los manejadores
  36. ### de señales definidos en el XML generado por glade
  37.  
  38. $programa->signal_autoconnect_from_package('main');
  39.  
  40. ### Por defecto (depende de la versión del módulo Gtk2::GladeXML
  41. ### tengas) no se muestra la ventana, se carga mas no se muestra
  42. ### Con el método show_all() hacemos que sea visible para el usuario
  43.  
  44. $ventana_principal->show_all();
  45.  
  46. ### El loop del programa. Esto es para que el programa se
  47. ### quede abierto siempre esperando la interacción del usuario,
  48. ### ya sea cerrar la ventana, presionar un botón o cualquier acción.
  49.  
  50. Gtk2->main;
  51.  
  52. ### Evento que se ejecuta cuando el usuario cierra la ventana
  53. ### Respondemos con un mensaje de cierre de toda la aplicación.
  54.  
  55. sub on_ventana_principal_destroy {
  56.     Gtk2->main_quit;
  57. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Y el resultado:
Imagen

Y ya está...

Bueno... no es TAN sencillo... la primera vez que hice el programa, al cerrar la ventana, no terminaba el programa (por lo que entonces, la ventana no indicaba al programa que estaba siendo destruida, y porque el programa no sabía qué hacer en esa circunstancia).

Pero en el mismo manual, un poco más abajo, hablando de las señales, ya explica cómo hacerlo. En la captura anterior del glade-3 se observa dónde estoy definiendo el método Perl que hay que ejecutar cuando el objeto se destruya (on_ventana_principal_destroy). Y en el código Perl, debo activar la captura de las señales definidas en el fichero glade con los métodos definidos en el programa (con el método signal_autoconnect_from_package()). Ya solo queda definir el método on_ventana_principal_destroy() e indicar dentro de él, qué es lo que hay que hacer cuando el usuario cierre la ventana (en nuestro ejemplo, terminar el programa). (Todo esto es una gran diferencia con programar Glade con C, ya que allí no es necesario realizar esta operación de capturar señales y definir una subrutina, pues en C ya está definida, por defecto la subrutina gtk_main_quit(), por lo que la ventana cierra la aplicación de forma automática (esto es lo que se explica en el manual de Gtk2::GladeXML, junto con un pequeño truco para que programar en Perl sea casi lo mismo que en C)).

Lo dicho... hay que leer mucho... pero después las aplicaciones van saliendo rápidamente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz con GTK

Notapor Txemaracas » 2011-09-01 06:47 @324

Por lo que veo, no voy a conseguir que me funcione Gtk2 en Windows y necesito crear la interfaz para dentro de nada. He estado mirando por el foro y parece que el programa Netbeans no es mucho de tu agrado ¿no, explorer? Me gustaría aunque sea, si puede ser, que me dijeras cuál puede serme de utilidad a la hora de programarlo, que pueda tener un sistema de ayuda gráfico como es GladeXML en este caso y que me vaya a funcionar en Windows. Por favor os agradecería la opinión. :wink:
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor explorer » 2011-09-01 07:51 @368

Yo (creo) que no tendría problemas en intentar instalar las bibliotecas de ActivePerl, pero son algo antiguas. Y no están completas, como te comento antes.

Nada... lo mejor es no romperse la cabeza: quitaría todo rastro de ActivePerl y de todas las bibliotecas y todo Perl que hubiera instalado, incluso repasaría las variables del entorno de Windows (importante) para quitar toda referencia que ActivePerl, Gtk2, etc... hubiese dejado por allí. Y a continuación... me bajaría e instalaría el Camelbox, eso sí, después de leerme con calma la página con las instrucciones de la instalación.

Y si aún así no funciona nada del Gtk2 en Windows, me pasaría a wxPerl.

NetBeans no me cae ni bien ni mal. Lo he usado para algún proyecto... pero hace ya mucho que no necesito programar en Java :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz con GTK

Notapor Txemaracas » 2011-09-01 09:01 @417

La verdad, antes de meterme en este foro estuve leyendo por Internet algunos otros foros que Netbeans era una buena opción y que gráficamente era de los programas que mejores interfaces gráficas hacían. Lo que pasa que después de crearme todas las pantallas necesarias (que las tengo todavía) las relacione unas con otras pero el problema era que no sé cómo llamar al script hecho en Perl desde Netbeans. Es decir, al pulsar por ejemplo el botón ejecutar, que se ejecute el script ejecu.pl. Lo pregunté por foros, me bajé un módulo para que leyera archivos Perl y demás pero el problema es ese: no sé cómo hacer una llamada desde Java a un programa en Perl.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor Txemaracas » 2011-09-01 14:08 @630

Bueno, creo que me decantaré por intentarlo con Netbeans porque ya que tengo las interfaces hechas. Solo me gustaría saber si ya que tu has usado para algún proyecto este programa, como bien me dices en el anterior post, me podrías decir si sabes dónde bajarme o mirar un buen tutorial donde me informe un poco sobre cómo usar las propiedades de los botones puesto que miré por Internet pero no encontré mucha utilidad.


--- Por cierto ya que has usado Netbeans me imagino que con Perl es igual me podrías indicar solo cómo relacionar un botón para que ejecute un script hecho en Perl? Intenté usar esto que encontré pero no funciona.

Sintáxis: [ Descargar ] [ Ocultar ]
Using java Syntax Highlighting
  1. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  2.         try {
  3.             Runtime.getRuntime().exec("Abrir.pl");
  4.         } catch (IOException ex) {
  5.             Logger.getLogger(Abrir.class.getName()).log(Level.SEVERE, null, ex);
  6.         }
  7. }
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor explorer » 2011-09-01 14:17 @637

Tendrás que visitar los foros de NetBeans y de Java, para resolver esas dudas... ¡Buena suerte!

En cuanto al exec, prueba a poner un 'perl' delante del código:

Runtime.getRuntime().exec("perl Abrir.pl");
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz con GTK

Notapor Txemaracas » 2011-09-01 15:39 @694

Vale, explorer, no voy a molestar más con este tema. Solo quiero, ya que tu has usado Netbeans, que me digas si crees que puedo conseguir ejecutar un script de Perl con Netbeans. Es que probé lo que me dijiste en el anterior post pero no lo ejecuta, porque me gustaría saber si voy a perder el tiempo intentando buscar una solución que no encontraré. Gracias.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados