Página 1 de 1

Glade + Perl

NotaPublicado: 2010-12-26 00:21 @056
por Leo_Gutierrez
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.002 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.002 segundos, usando GeSHi 1.0.8.4


En serio no sé qué pasa, por que creo que estoy haciendo todo bien.

Re: Glade + Perl

NotaPublicado: 2010-12-26 07:39 @360
por explorer
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>

Re: Glade + Perl

NotaPublicado: 2010-12-26 13:56 @622
por Leo_Gutierrez
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?

Re: Glade + Perl

NotaPublicado: 2010-12-26 16:51 @743
por explorer
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.

Re: Glade + Perl

NotaPublicado: 2010-12-26 17:31 @772
por Leo_Gutierrez
Tienes razón, ya está resuelto. Gracias, explorer.

Re: Glade + Perl

NotaPublicado: 2014-10-08 07:56 @372
por makhix
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.

Re: Glade + Perl

NotaPublicado: 2014-10-08 08:48 @408
por explorer
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.