• Publicidad

Ajuste de widgets en Gtk2

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

Ajuste de widgets en Gtk2

Notapor visualfree » 2009-11-20 22:08 @964

Hola, mi problema es el siguiente: necesito saber cómo hacer para que no todo quede tan separado uno de otro... espero hacerme entender.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
________________________________________________________________ <-largo aplicación
_________lb1___________________.____________txt1________________
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


entonces el lb1 se auto estira junto el text1...

y lo que yo necesito es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
________
lb1.txt1 <---que no se estire o poder definir las dimensiones de los componentes
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Gtk2 '-init';
  2. my $window=Gtk2::Window->new('toplevel');
  3. $window->set_border_width(10);
  4. $window->signal_connect(destroy =>sub{
  5.  Gtk2->main_quit
  6. });
  7. $lb1=Gtk2::Label->new('Numero 1:');
  8. $lb2=Gtk2::Label->new('Numero 2:');
  9. $lb3=Gtk2::Label->new('Opcion:');
  10. $lb4=Gtk2::Label->new('Resultado:');
  11. $text1=Gtk2::Entry->new;
  12. $text2=Gtk2::Entry->new;
  13. $text3=Gtk2::Entry->new;
  14. $boton=Gtk2::Button->new('Calcular');
  15. $vertical=Gtk2::HBox->new(3,false);
  16. $horizontal=Gtk2::HBox->new(2,false);
  17. $radiobutton1 = Gtk2::RadioButton->new_with_label('grupo', '+');
  18. @grupo = $radiobutton1->get_group;
  19. $radiobutton2 = Gtk2::RadioButton->new_with_label(@grupo, '-');
  20. $radiobutton3 = Gtk2::RadioButton->new_with_label(@grupo, '*');
  21. $radiobutton4 = Gtk2::RadioButton->new_with_label(@grupo, '/');
  22. $vertical->pack_start($radiobutton1,false,false,false);
  23. $vertical->pack_start($radiobutton2,false,false,false);
  24. $vertical->pack_start($radiobutton3,false,false,false);
  25. $vertical->pack_start($radiobutton4,false,false,false);
  26. $horizontal->pack_start($text3,false,false,false);
  27. $horizontal->pack_start($boton, gtk.TRUE, gtk.TRUE, 0);
  28. $tabla=Gtk2::Table->new(4,2,FALSE);
  29. $tabla->attach_defaults($lb1,0,1,0,1);
  30. $tabla->attach_defaults($text1,1,2,0,1);
  31. $tabla->attach_defaults($lb2,0,1,1,2);
  32. $tabla->attach_defaults($text2,1,2,1,2);
  33. $tabla->attach_defaults($lb3,0,1,2,3);
  34. $tabla->attach_defaults($vertical,1,2,2,3);
  35. $tabla->attach_defaults($lb4,0,1,3,4);
  36. $tabla->attach_defaults($horizontal,1,2,3,4);
  37. $window->add($tabla);
  38. $window->show_all;
  39. Gtk2->main;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


De paso me gustaría saber si alguien sabe agregar un Table o JTable en Java pero en Perl con Gtk2::, algo como una grilla, no sé si me entienden; espero que sí. Saludos...
Última edición por explorer el 2009-11-21 06:50 @326, editado 3 veces en total
Razón: Ortografía, título
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Publicidad

Re: Ajuste de widgets en Gtk2

Notapor explorer » 2009-11-21 08:01 @376

El problema está en que Perl no sabe lo que significa TRUE y FALSE. No son símbolos que sean exportados por el módulo Gtk2.

Si miras el manual que hay en Introduction to GUI Programming with Gtk2-Perl verás que usan esas constantes, pero después de definirlas al principio:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use constant TRUE  => 1;
use constant FALSE => 0;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Con esto, ya salen ajustados los contenidos dentro de la tabla. Lo mismo pasa con la palabra 'false'.

Perl, por defecto, cuando encuentra una palabra que no sabe lo que es y está seguro de que no es una función, la convierte a una palabra suelta (una cadena de caracteres). Así que, en tu programa, estás poniendo un valor verdadero (la cadena de caracteres 'false') en un sitio donde realmente querías poner un valor falso (que, tendría que ser una cadena vacía '' o un 0). Así que te toca cambiar todos los 'false' del programa por la nueva constante 'FALSE'.

Para evitar estos errores, nadie mejor que el propio Perl para que nos avise.

Ponemos 'use warnings;' al principio del programa y empiezan a salir errores y avisos como este:

Unquoted string "false" may clash with future reserved word at ./code_19824_2.pl line 9.

Perl te está avisando de que ha encontrado una cadena de caracteres, que es "false", y que, de la manera que la has escrito (sin entrecomillar), sospecha que puede interferir con futuras palabras reservadas del Perl. Te deja seguir, pero te lo advierte. Para nosotros, significa que hemos colocado un literal donde realmente queríamos colocar una constante.

Además, Perl nos avisa de otro error:

Unquoted string "gtk" may clash with future reserved word at ./code_19824_2.pl line 43.

¡Vaya! Perl tampoco sabe lo que es "gtk".

El método pack_start() va agregando componentes desde el comienzo del contenedor. Tiene 4 argumentos, que son: el objeto a empaquetar, una bandera que indica si debe tomar espacio suficiente para expandirse, una bandera para indicar si el espacio extra debe ser tomado por el propio objeto o por espacio vacío, y un valor del extra de píxeles que deben rodear al objeto con respecto a sus vecinos.

Veo también que a la hora de crear los HBox, pones valores como 3 y 2, en lugares donde Gtk2 espera un valor booleano. Así que lo que realmente estás pasando es un valor verdadero. Y es precisamente aquí donde estás definiendo que el espacio ocupado por los objetos sea homogéneo, cuando realmente no queremos eso.

El programa quedaría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3.  
  4. use Gtk2 '-init';
  5.  
  6. use constant TRUE  => 1;
  7. use constant FALSE => 0;
  8.  
  9. my $window = Gtk2::Window->new('toplevel');
  10. $window->set_border_width(10);
  11. $window->signal_connect(destroy =>sub{ Gtk2->main_quit });
  12.  
  13. $lb1 = Gtk2::Label->new('Numero 1:');
  14. $lb2 = Gtk2::Label->new('Numero 2:');
  15. $lb3 = Gtk2::Label->new('Opcion:');
  16. $lb4 = Gtk2::Label->new('Resultado:');
  17.  
  18. $text1 = Gtk2::Entry->new;
  19. $text2 = Gtk2::Entry->new;
  20. $text3 = Gtk2::Entry->new;
  21.  
  22. $boton = Gtk2::Button->new('Calcular');
  23.  
  24. $vertical   = Gtk2::HBox->new(FALSE,3);
  25. $horizontal = Gtk2::HBox->new(FALSE,3);
  26.  
  27. #$radiobutton1 = Gtk2::RadioButton->new_with_label(undef, '+');
  28. #$grupo = $radiobutton1->get_group;
  29. #$radiobutton2 = Gtk2::RadioButton->new_with_label($grupo, '-');
  30. #$radiobutton3 = Gtk2::RadioButton->new_with_label($grupo, '*');
  31. #$radiobutton4 = Gtk2::RadioButton->new_with_label($grupo, '/');
  32.  
  33. $radiobutton1 = Gtk2::RadioButton->new_with_label(undef,         '+');
  34. $radiobutton2 = Gtk2::RadioButton->new_with_label($radiobutton1, '-');
  35. $radiobutton3 = Gtk2::RadioButton->new_with_label($radiobutton2, '*');
  36. $radiobutton4 = Gtk2::RadioButton->new_with_label($radiobutton3, '/');
  37.  
  38. $vertical->pack_start($radiobutton1,FALSE,FALSE,0);
  39. $vertical->pack_start($radiobutton2,FALSE,FALSE,0);
  40. $vertical->pack_start($radiobutton3,FALSE,FALSE,0);
  41. $vertical->pack_start($radiobutton4,FALSE,FALSE,0);
  42.  
  43. $horizontal->pack_start($text3,FALSE,FALSE, 0);
  44. $horizontal->pack_start($boton, TRUE, TRUE, 5);
  45.  
  46. $tabla=Gtk2::Table->new(4,2,FALSE);
  47. $tabla->attach_defaults($lb1,0,1,0,1);
  48. $tabla->attach_defaults($text1,1,2,0,1);
  49. $tabla->attach_defaults($lb2,0,1,1,2);
  50. $tabla->attach_defaults($text2,1,2,1,2);
  51. $tabla->attach_defaults($lb3,0,1,2,3);
  52. $tabla->attach_defaults($vertical,1,2,2,3);
  53. $tabla->attach_defaults($lb4,0,1,3,4);
  54. $tabla->attach_defaults($horizontal,1,2,3,4);
  55.  
  56. $window->add($tabla);
  57.  
  58. $window->show_all;
  59.  
  60. Gtk2->main;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Fíjate también que he colocado una versión alternativa de creación del grupo de botones radio. Tanto la versión que está comentada como la que no, funcionan de la misma manera. Fíjate que el primer botón lo he marcado con un 'undef'.

Todo esto lo he sacado de los manuales de ayuda de Gtk2 en http://gtk2-perl.sourceforge.net/doc/pod/
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ajuste de widgets en Gtk2

Notapor visualfree » 2009-11-21 13:46 @615

Muy bien, gracias maestro :) Lo último: ¿qué tipo de grilla puedo usar con gtk2...?
Por ejemplo, en Java usaba JTable. Acá, no sé qué podré usar...
Última edición por explorer el 2009-11-21 16:52 @744, editado 1 vez en total
Razón: Ortografía
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Ajuste de widgets en Gtk2

Notapor explorer » 2009-11-21 16:54 @746

Una grilla es la hembra del grillo. ¿O no?
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ajuste de widgets en Gtk2

Notapor visualfree » 2009-11-21 17:04 @753

Lógicamente, sí :) Y lo que te preguntaba ya lo averigüé, que es "Gtk2::SimpleList " pero no sé cómo usarlo. Si me pudieras dar un ejemplo muy básico te lo agradecería...
Última edición por explorer el 2009-11-21 17:15 @760, editado 1 vez en total
Razón: Ortografía
visualfree
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-11-19 03:01 @167

Re: Ajuste de widgets en Gtk2

Notapor explorer » 2009-11-21 17:48 @783

Yo no, pues nunca lo he manejado... ¿no te vale el ejemplo que está en la sinopsis de Gtk2::SimpleList?
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
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 0 invitados