• 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 Txemaracas » 2011-08-18 10:19 @472

Hola. Ya tengo instalado Bundle::Gnome2 pero intento ejecutar este script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/perl/bin
  2. use strict;
  3. use Gtk2 -init;
  4. use Gtk2::GladeXML;
  5.  
  6. my($programa, $ventana_principal, $etiqueta, $widget_entrada_de_texto);
  7.  
  8. $programa = Gtk2::GladeXML->new('prueba.glade');
  9.  
  10. $ventana_principal = $programa->get_widget('ventana_principal');
  11. $etiqueta = $programa->get_widget('etiqueta');
  12. $widget_entrada_de_texto = $programa->get_widget('entrada1');
  13.  
  14. $programa->signal_autoconnect_from_package('main');
  15.  
  16. $ventana_principal->show_all();
  17.  
  18. Gtk2->main;
  19.  
  20. sub on_boton_cerrar_clicked {Gtk2->main_quit;}
  21. sub on_boton_recoger_datos_clicked {
  22.         my($texto_introducido);
  23.         $texto_introducido = $widget_entrada_de_texto->get_text();
  24.         $etiqueta->set_markup("$texto_introducido");
  25. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


pero me da el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  "Can´t locate Gtk2.pm in @INC <@INC contains: C:/Perl/site/lib C:/Perl/lib .> at line 3."
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Publicidad

Re: Crear interfaz con GTK

Notapor explorer » 2011-08-18 11:09 @506

Si está instalado Gtk2.pm, estará en algún directorio del ordenador...

Usa el sistema de búsqueda de tu sistema operativo para localizarlo.

Una vez que lo sepas, solo tienes que agregar una línea

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use lib '/ruta/al/sitio/donde/están/los/módulos/instalados/';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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-08-19 06:46 @323

Hola. Vale, lo encontré pero lo tengo instalado en la aplicación camelbox/site/lib. ¿No se podría cambiar a la carpeta de Perl?

Gtk2::GladeXML está en camelbox\site\lib\Gtk2 y a la hora de guardar el script me dice:

"Bareword found where operator expected, near "use lib 'C" syntax error near "use lib 'C""

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/perl/bin
  2. use strict;
  3. use lib 'C:\camelbox\site\lib\';
  4. use lib 'C:\camelbox\site\lib\Gtk2';
  5.  
  6. my($programa, $ventana_principal, $etiqueta, $widget_entrada_de_texto);
  7.  
  8. $programa = Gtk2::GladeXML->new('prueba.glade');
Coloreado en 0.001 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-08-19 09:44 @447

Cambia los caracteres '\' por '/'.

Resulta que cuando tienes un entrecomillado simple, todos los caracteres que hay dentro se tratan de forma literal. Pero... hay un problema... hay un caso especial, muy especial... y es, justamente, lo que te pasa.

¿Qué ocurre si un día queremos meter una comilla simple dentro de una cadena de caracteres entrecomillada también simple? Pues en ese caso necesitamos "escapar" el significado de la comilla:

my $texto = 'Una cadena de caracteres con comilla simple: \' que termina\njusto aquí';

De esa manera, Perl sabe dónde termina, realmente, el entrecomillado simple. (Fijarse que el '\n' son dos caracteres, no es un carácter de avance de línea: ¡estamos con comillas simples!)

Otra opción más clásica sería usar entrecomillado doble:

my $texto = "Una cadena de caracteres con comilla simple: ' que termina justo aquí";

No hace falta "escapar" la comilla simple porque Perl sabe donde empieza y acaba la cadena de caracteres.

Bueno, pues veamos que es lo que tienes tú:

use lib 'C:\camelbox\site\lib\';

Y ya ves el problema: todos los caracteres '\' que hay dentro de la cadena son literales (son exactamente un carácter '\', pero el último '\', por estar delante de una comilla simple, está escapándola, y Perl cree que la cadena continúa en la siguiente línea. Vamos, que estás liando a Perl.

Solución 1: usar otro delimitador para la ruta de ficheros.

Como da la casualidad de que esta cadena tiene un propósito, que es el de indicar una ruta a un directorio, y estamos en Windows(MSDOS), en Perl se puede usar el delimitador '/':

use lib 'C:/camelbox/site/lib/';

Desde hace años, en MSDOS, ya se puede usar ese delimitador, para igualarlo con el del Unix.

Solución 2: quitar el último '\'.

use lib 'C:\camelbox\site\lib';

use lib siempre se refiere a una ruta, por lo que sabe que el último componente de la ruta debe ser el nombre de un directorio o carpeta. No es necesario, entonces, poner el '\' final.

Yo, por defecto, siempre uso '/'.

Yo, también, leería la documentación de CamelBox, para saber la forma correcta de usarla e instalarla junto con mi distribución de Perl. ¿Es, acaso, el uso de 'use lib' la única forma de usarlo? A lo mejor, con poner la variable de entorno PERL5LIB también funciona...
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-08-19 09:58 @457

He cambiado y he puesto esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use lib 'C:/camelbox/site/lib/';
  2. use lib 'C:/camelbox/site/lib/Gtk2/';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero me dice:

"Can´t locate object method "new" via package "Gtk2::GladeXML" <perhaps you forgot to load "Gtk2::GladeXML"?> at line 8."

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $programa = Gtk2::GladeXML->new('prueba.glade');
Coloreado en 0.001 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-08-19 10:12 @466

La segunda línea sobra. Con la primera, debería ser suficiente.

El mensaje de error dice que se te ha olvidado poner un

use Gtk2::GladeXML;

en alguna parte del código.
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-08-19 10:27 @477

Pero es que si pongo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. Use Gtk2::GladeXML;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Me da error porque está en el directorio camelbox/site/lib/Gtk2.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor explorer » 2011-08-19 10:38 @485

Si quieres usar un módulo, debes declararlo en el programa, con el 'use'.

perl, entonces, lo buscará por todos los directorios indicados por el array especial @INC.

Si pones

use Gtk2::GladeXML;

perl buscará por el módulo 'GladeXML.pm' dentro de un directorio 'Gtk2' que esté colgando de cualquiera de los directorios indicados por @INC.

Si no está en ninguno de esos directorios, entonces es cuando fallará diciendo que no ha conseguido cargar el módulo.

Si el módulo está en otro sitio (como parece que es este caso), hay que indicarlo con 'use lib':

use lib 'C:/camelbox/site/lib/';

Con ello, estamos agregando 'C:/camelbox/site/lib/' a la lista de directorios, donde buscará por 'Gtk2/GladeXML.pm'.

(¡Ojo! Observa como los '::' los sustituye por un '/', para que corresponda con el delimitador de directorios.)
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-08-19 10:48 @491

Sí, si yo sé que Gtk2::GladeXML(GladeXML.pm) está en C:/camelbox/site/lib/Gtk2, por eso he agregado las líneas:

use lib 'C:/camelbox/site/lib';
use lib 'C:/camelbox/site/lib/Gtk2';

pero nada, me sigue saliendo el error. No me deja ejecutarlo.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz con GTK

Notapor explorer » 2011-08-19 11:06 @504

Si pones las líneas

use lib 'C:/camelbox/site/lib/Gtk2';
use Gtk2::GladeXML;


perl buscará por

C:/camelbox/site/lib/Gtk2/Gtk2/GladeXML.pm

¿Realmente está ahí metido?

Por favor, vuelve a publicar el código y el mensaje de error que te sale.
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

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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