• Publicidad

Glade + Perl

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

Glade + Perl

Notapor Leo_Gutierrez » 2010-12-26 00:21 @056

Hola, estoy intentando usar Glade para general la interfaz gráfica, estoy haciendo todo bien (según los ejemplos que he visto).

Ejemplo.

Creo una simple ventanita con glade.


Sintáxis: [ Descargar ] [ Ocultar ]
  1. <?xml version="1.0"?> 
  2. <interface> 
  3.  <requires lib="gtk+" version="2.16"/> 
  4.  <!-- interface-naming-policy project-wide --> 
  5.  <object class="GtkWindow" id="myap"> 
  6.   <property name="title" translatable="yes">Mi aplicaci&#xF3;n</property> 
  7.   <child> 
  8.    <placeholder/> 
  9.   </child> 
  10.  </object> 
  11. </interface> 


Ese es xml, este es mi script perl:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.   use strict;
  3.   use Gtk2::GladeXML;
  4.  
  5.   use Gtk2 -init;
  6.   my($programa, $ventana_principal);
  7.  
  8.   $programa = Gtk2::GladeXML->new('hola.glade');
  9.  
  10.   $ventana_principal = $programa->get_widget('ventana_principal');
  11.  
  12.   $ventana_principal->show_all();
  13.  
  14.   Gtk2->main;
  15.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Esta es mi salida:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. leo@leo-desktop:~/Escritorio$ perl script.pl
  2.  
  3. (script.pl:4088): libglade-WARNING **: Expected <glade-interface>.  Got <interface>.
  4.  
  5. (script.pl:4088): libglade-WARNING **: did not finish in PARSER_FINISH state
  6. Can't call method "get_widget" on an undefined value at script.pl line 10.
  7. leo@leo-desktop:~/Escritorio$
  8.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


En serio no sé qué pasa, por que creo que estoy haciendo todo bien.
Leo_Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 91
Registrado: 2008-08-20 23:38 @026

Publicidad

Re: Glade + Perl

Notapor explorer » 2010-12-26 07:39 @360

Me parece que lo que has generado en Glade es un proyecto GtkBuilder, en lugar de un proyecto Glade.

Al principio del documento pone

<requires lib="gtk+" version="2.16"/>

en lugar de

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

Re: Glade + Perl

Notapor Leo_Gutierrez » 2010-12-26 13:56 @622

Cuando abro glade en un proyecto nuevo, escojo GtkBuilder, así me sale:

Imagen

Luego agrego una pequeña ventana y al guardar el proyecto, escojo "Todos los archivos de Glade"

Con lo que obtengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. leo@leo-desktop:~/Escritorio$ cat hola.glade
  2. <?xml version="1.0"?>
  3. <interface>
  4.   <requires lib="gtk+" version="2.16"/>
  5.   <!-- interface-naming-policy project-wide -->
  6.   <object class="GtkWindow" id="window1">
  7.     <child>
  8.       <placeholder/>
  9.     </child>
  10.   </object>
  11. </interface>
  12. leo@leo-desktop:~/Escritorio$
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora, ejecuto con mi siguiente script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Gtk2 -init;
  4. use Gtk2::GladeXML;
  5. my $gui = Gtk2::GladeXML->new('hola.glade');
  6. Gtk2->main;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y en la salida obtengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. leo@leo-desktop:~/Escritorio$ perl script.pl
  2.  
  3. (script.pl:3178): libglade-WARNING **: Expected <glade-interface>.  Got <interface>.
  4.  
  5. (script.pl:3178): libglade-WARNING **: did not finish in PARSER_FINISH state
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Ahora, si escojo "Libglade" en las preferencias del proyecto nuevo, agrego un componente y guardo como
"Archivos de libglade" obtengo en el archivo glade:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. leo@leo-desktop:~/Escritorio$ cat hola.glade
  2. <?xml version="1.0"?>
  3. <glade-interface>
  4.   <!-- interface-requires gtk+ 2.16 -->
  5.   <!-- interface-naming-policy project-wide -->
  6.   <widget class="GtkWindow" id="window1">
  7.     <child>
  8.       <placeholder/>
  9.     </child>
  10.   </widget>
  11. </glade-interface>
  12. leo@leo-desktop:~/Escritorio$
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y si ejecuto de nuevo mi script no me salen errores, pero sigue sin verse mi formulario.

Ya se puede ver que obtengo "glade-interface", pero explorer, me dices que necesito "<requires lib="gtk+" version="2.16"/>", pero ¿cómo doy con eso?
Leo_Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 91
Registrado: 2008-08-20 23:38 @026

Re: Glade + Perl

Notapor explorer » 2010-12-26 16:51 @743

No, yo no he dicho qué necesitas. He dicho que, según el código generado por Glade que has mostrado antes, habías creado un proyecto GtkBuilder, en lugar de un Glade, que es lo segundo que ahora muestras.

Y si no te sale nada, es porque no has dado la orden de mostrar la ventana. Tú código es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $gui = Gtk2::GladeXML->new('hola.glade');  # acceso al interfaz creado
  2. Gtk2->main;                                   # entramos en la lista de espera de eventos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Te falta, en medio, la instrucción para visualizar la ventana o el diálogo leído. Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ventana = $gui->get_widget('window1');
  2. $ventana->show_all();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Repasa el capítulo segundo del manual de Alejandro Garrido Mota sobre Desarrollo de aplicaciones gráficas (GTK+) con Perl y Glade.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Glade + Perl

Notapor Leo_Gutierrez » 2010-12-26 17:31 @772

Tienes razón, ya está resuelto. Gracias, explorer.
Leo_Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 91
Registrado: 2008-08-20 23:38 @026

Re: Glade + Perl

Notapor makhix » 2014-10-08 07:56 @372

Buenas tardes/días:

Estaba probando la suite glade, pero no consigo darle movida.

Quizás no he bajado la última versión y/o las librerías no coinciden, la cosa es que no para de tirarme errores y no coinciden las imágenes que se muestran en el mensaje con las de mi glade.

Bueno, ahora a los papeles:

Mi script Perl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use Gtk2::GladeXML;
  5. use Gtk2 -init;
  6.  
  7. my($programa, $ventana_principal);
  8. $programa = Gtk2::GladeXML->new('test1.glade');
  9.  
  10. $ventana_principal = $programa->get_widget('window1');
  11. $ventana_principal->show_all();
  12.  
  13. Gtk2->main;
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Mi archivo .glade
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <interface>
  3.   <!-- interface-requires gtk+ 3.0 -->
  4.   <object class="GtkWindow" id="window1">
  5.     <property name="can_focus">False</property>
  6.     <child>
  7.       <object class="GtkLabel" id="label1">
  8.         <property name="visible">True</property>
  9.         <property name="can_focus">False</property>
  10.         <property name="label" translatable="yes">Hola Mundo!</property>
  11.       </object>
  12.     </child>
  13.   </object>
  14. </interface>
  15.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y el error que me tira por pantalla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. root@kali:~/Desktop/TEST/glade# ./test1.pl
  2.  
  3. (test1.pl:7114): libglade-WARNING **: Expected <glade-interface>.  Got <interface>.
  4.  
  5. (test1.pl:7114): libglade-WARNING **: did not finish in PARSER_FINISH state
  6. Can't call method "get_widget" on an undefined value at ./test1.pl line 10.
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Bueno, según puedo inferir me dice que en xml se espera una etiqueta que no está, <glade-interface> en lugar <interface>, así y todo, como que eso se lo podría bancar me tira también que no puede llamar al metodo "get_widget".

Bueno, lo que la intuición dice es abrir con gedit el .glade y cambiar lo que dice el mensaje de error...

¡OOPS! Negativo...
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. root@kali:~/Desktop/TEST/glade# ./test1.pl
  2.  
  3. (test1.pl:7138): libglade-WARNING **: Unexpected element <object> inside <glade-interface>.
  4. Can't call method "show_all" on an undefined value at ./test1.pl line 11.
  5.  
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Bueno, ¡seguimos con el gedit a full! y cambiamos todos los tags <object> por <widget>.

¡Voila! Funciona...


Ahora me dirán que para qué pusiste todo este mensaje comentando algo tan trivial como lo que acabas de comentar, y no están errados...

Lo hice por dos motivos: uno para darle una mano a quienes están tan perdidos como yo en esto de la programación Perl con interfaz gráfica y para preguntar al foro si:
  • ¿Debería estar utilizando las librerías Gtk3 como dice el comentario en el xml/.glade (aunque no hay documentación suficiente)?
  • La versión de glade que tengo es la 3.12.1, y no me da las opciones de guardar como lo exponía explorer unos mensajes más arriba. ¿Hay forma de que no sea tan artesanal la forma de editar el xml?
Bueno, para esto y un montón (mogollón como a uds. les gusta decir) de cosas más es que dejo la inquietud...

Saludos y gracias.
Ahora salgo a correr un rato para aclarar las ideas.
makhix
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2009-08-06 15:13 @675

Re: Glade + Perl

Notapor explorer » 2014-10-08 08:48 @408

Sobre Gtk3, no sé decirte, no lo conozco.

Y sobre la creación del XML, se supone que el programa Glade debería permitir hacer todo eso, que por algo es un editor de este tipo de objetos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado