• Publicidad

Cómo coger datos de un combobox

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cómo coger datos de un combobox

Notapor oihantze » 2009-09-08 13:13 @592

¡Hola!

Estoy trabajando con las interfaces gráficas de gtk2 y acabo de hacer un combobox para que el usuario elija un número.

La cosa es que... ¿cómo sé yo cuál de todos los números ha pulsado? ¿Y si quiero luego pasarle en una variable a otra interfaz el número pulsado... ¿cómo lo hago?

Esto es lo que yo he escrito:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$tabla_combo= Gtk2::Table->new(2,3,TRUE);
$comboBox = Gtk2::ComboBox-> new_text;      
$model = $comboBox->get_model;
$model->set ($model->append, 0, "1");
$model->set ($model->append, 0, "2");
$model->set ($model->append, 0, "3");
           [...]
$model->set ($model->append, 0, "30");
$tabla_combo->attach_defaults($comboBox, 1,2,1,2);
$tabla_contenedor->attach_defaults($tabla_combo, 1,2,3,4);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Un saludo.

Oihantze
Última edición por explorer el 2009-09-08 14:43 @655, editado 1 vez en total
Razón: Ortografía
oihantze
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-12 17:13 @759

Publicidad

Re: Cómo coger datos de un combobox

Notapor explorer » 2009-09-08 14:51 @660

Pues según la página de manual, debería ser get_active_text().
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: Cómo coger datos de un combobox

Notapor oihantze » 2009-09-10 11:51 @535

Pero me da este error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
***   Can't locate object method "get_active" via package "Gtk2::ListStore" at ./num_docs.pl line 76.
***  ignoring at ./num_docs.pl line 73.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Por qué puede ser?
Última edición por explorer el 2009-09-10 12:12 @550, editado 1 vez en total
Razón: Ortografía
oihantze
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-12 17:13 @759

Re: Cómo coger datos de un combobox

Notapor explorer » 2009-09-10 12:16 @552

Sin ver el código, es difícil de decir. Por el tipo de error parece que no se ha cargado el módulo. Que quizás falta hacer algún use.
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: Cómo coger datos de un combobox

Notapor oihantze » 2009-09-11 03:03 @169

Este es el código, si falta un use ¿cuál puede ser? Es que tengo todas las interfaces hechas ya, ¡y solamente me falta el comboBox por arreglar!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use Gtk2 '-init';
  4. use Glib qw/TRUE FALSE/; #pa q valgan los valores true y false
  5.  
  6. $ventana = Gtk2::Window->new('toplevel');
  7. $ventana->set_title('Documentos');
  8. $ventana->set_border_width(20); #el borde de la ventana de 20px
  9.  
  10. $tabla_contenedor = Gtk2::Table->new(3,7, FALSE);
  11.  
  12. $frase = Gtk2::Label->new('Indique cuantos documentos desea buscar');
  13. $tabla_contenedor->attach_defaults($frase, 1,2,1,2);
  14.  
  15. $tabla_combo= Gtk2::Table->new(2,3,TRUE);
  16. $comboBox = Gtk2::ComboBox-> new_text;    
  17. $model = $comboBox->get_model;
  18. $model->set ($model->append, 0, "1");
  19. $model->set ($model->append, 0, "2");
  20.             [...]
  21. $model->set ($model->append, 0, "29");
  22. $model->set ($model->append, 0, "30");
  23. $tabla_combo->attach_defaults($comboBox, 1,2,1,2);
  24. $tabla_contenedor->attach_defaults($tabla_combo, 1,2,3,4);
  25.  
  26. $tabla_botones = Gtk2::Table->new(3,5, TRUE);
  27.  
  28. $boton_atras = Gtk2::Button->new_with_label('Atras');
  29. $boton_atras->signal_connect('clicked' => sub { &atras($ARGV[3],$ARGV[0])});
  30. $tabla_botones->attach_defaults($boton_atras, 1,2,1,2);
  31.  
  32. $boton_ok = Gtk2::Button->new_from_stock('gtk-ok');
  33. $boton_ok->signal_connect('clicked' => sub { &ir_a($ARGV[0],$ARGV[1],$ARGV[2],$ARGV[3],$ARGV[4],$ARGV[5])});
  34. $tabla_botones->attach_defaults($boton_ok, 3,4,1,2);
  35.  
  36. $tabla_contenedor->attach_defaults($tabla_botones, 1,2,5,6);
  37.  
  38. $rc_style = Gtk2::RcStyle->new;
  39. $rc_style->bg_pixmap_name('normal', 'fondo.jpg');
  40. $ventana->modify_style($rc_style);
  41. $ventana->set_keep_above(TRUE);
  42. $ventana->add($tabla_contenedor);
  43. $ventana->set_default_size(200,200);
  44. $ventana->move(380, 300);
  45. $ventana->set_resizable(FALSE);
  46. $ventana->show_all;
  47.  
  48. Gtk2->main;
  49.  
  50. sub ir_a {
  51.        
  52.         exec "./ejecutando_estoy_en_noja.pl 15 $_[0] $_[1] $_[2] $_[3] $_[4] $_[5]";
  53. }
  54.  
  55. sub atras{
  56.         my $punto=".";
  57.         exec "$punto$_[0] $_[1]";
  58. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
oihantze
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-12 17:13 @759

Re: Cómo coger datos de un combobox

Notapor explorer » 2009-09-11 03:05 @170

¿use Gtk2::ComboBox;?
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: Cómo coger datos de un combobox

Notapor oihantze » 2009-09-11 03:24 @183

Si, pero poniendo ese use() me da este error.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't locate Gtk2/ComboBox.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./num_docs.pl line 5.
BEGIN failed--compilation aborted at ./num_docs.pl line 5.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


que line 5 es donde está puesto lo de use Gtk2::ComboBox;
oihantze
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-12 17:13 @759

Re: Cómo coger datos de un combobox

Notapor explorer » 2009-09-11 03:35 @191

... que es el error típico de que Gtk2::ComboBox no está instalado en el sistema.
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: Cómo coger datos de un combobox

Notapor oihantze » 2009-09-12 05:42 @279

¿Y cómo se puede instalar?
oihantze
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-12 17:13 @759

Re: Cómo coger datos de un combobox

Notapor explorer » 2009-09-12 07:18 @346

Perdón, he metido la pata... :(

Los módulos Gtk2 no se instalan por separado: están todos reunidos en una sola librería.

Pues el caso es que no sé porqué te sale ese mensaje. Se supone entonces que con el primer 'use Gtk2' debería valer.

Te he dejado un ejemplo que a mí sí que me funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use Gtk2 '-init';
  7. use Glib qw/TRUE FALSE/;
  8.  
  9. my @valores = 11 .. 20;
  10.  
  11.         ## Titular
  12.         my $frase = Gtk2::Label->new('Indique cuántos documentos desea buscar');
  13.  
  14.             ## Lista de opciones
  15.             my $comboBox = Gtk2::ComboBox->new_text();
  16.             for (@valores) {
  17.                 $comboBox->append_text($_);
  18.             }
  19.             $comboBox->set_active (0);
  20.  
  21.         ## Tabla de la lista
  22.         my $tabla_combo= Gtk2::Table->new(2,3,TRUE);
  23.         $tabla_combo->attach_defaults($comboBox, 1,2,1,2);
  24.  
  25.             ## Botón Atrás
  26.             my $boton_atras = Gtk2::Button->new_with_label('Atras');
  27.             $boton_atras->signal_connect(clicked => \&atras);
  28.  
  29.             ## Botón Ok
  30.             my $boton_ok = Gtk2::Button->new_from_stock('gtk-ok');
  31.             $boton_ok->signal_connect(clicked => \&ir_a);
  32.  
  33.         ## Tabla de los botones
  34.         my $tabla_botones = Gtk2::Table->new(3,5, TRUE);
  35.         $tabla_botones->attach_defaults($boton_atras, 1,2,1,2);
  36.         $tabla_botones->attach_defaults($boton_ok, 3,4,1,2);
  37.  
  38.     ## Tabla contenedor
  39.     my $tabla_contenedor = Gtk2::Table->new(3,7, FALSE);
  40.     $tabla_contenedor->attach_defaults($frase, 1,2,1,2);
  41.     $tabla_contenedor->attach_defaults($tabla_combo, 1,2,3,4);
  42.     $tabla_contenedor->attach_defaults($tabla_botones, 1,2,5,6);
  43.  
  44.  
  45. ## Ventana principal
  46. my $ventana = Gtk2::Window->new('toplevel');
  47. $ventana->set_title('Documentos');
  48. $ventana->set_border_width(20); # 20px
  49.  
  50.         ## Estilo
  51.         my $rc_style = Gtk2::RcStyle->new;
  52.         $rc_style->bg_pixmap_name('normal', 'fondo.jpg');
  53.  
  54. $ventana->modify_style($rc_style);
  55. $ventana->signal_connect (delete_event => sub {Gtk2->main_quit; TRUE}); # Cierre de la app
  56. $ventana->add($tabla_contenedor);
  57. $ventana->set_default_size(200,200);
  58. $ventana->set_keep_above(TRUE);
  59. $ventana->set_resizable(FALSE);
  60. $ventana->move(380, 300);
  61. $ventana->show_all;
  62.  
  63. Gtk2->main;
  64.  
  65. sub ir_a {
  66.     print 'Índice: ', $comboBox->get_active(),      "\n";
  67.     print 'Texto : ', $comboBox->get_active_text(), "\n";
  68. }
  69.  
  70. sub atras{
  71.     Gtk2->main_quit;
  72. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Es igual que el tuyo, salvo que el orden de creación de los componentes es por jerarquía de menos a más. Así quedan agrupadas las órdenes para un mismo componente (que es lo contraría de lo que haríamos si usáramos el método del pack()).

Presta atención a los trucos de agregar elementos al Combobox por medio del for(), que también es válido para listas de elementos.

He añadido también llamadas a Gtk2->main_quit() para terminar correctamente la aplicación, tanto al pulsar el botón 'Atrás' como cuando la ventana recibe la señal de cierre (puesto de dos formas distintas).

En cuanto a la lectura del Combobox, uso los métodos get_active() y get_active_text().
Última edición por explorer el 2009-09-12 07:47 @366, editado 1 vez en total
Razón: Una tilde
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

Siguiente

Volver a Intermedio

¿Quién está conectado?

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

cron