2011-12-08 15:51 @702 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Pasar datos de un array a una simplelist
|
¡Hola! Soy Gonzalo desde Uruguay, primera vez que pregunto algo en el foro... Soy muy nuevo en Perl y tengo un problemita. Estoy tratando de usar gtk2-perl y el tema es el siguiente: Quiero tratar de poner los datos del array en una simplelist y luego mostrarlos en un frame con un scrolledwindow y no lo puedo hacer... Mi código es este: Using perl Syntax Highlighting ...
my $args = shift;
$args->{results}= Gtk2::SimpleList->new(
name => 'text'
);
my $window2 = Gtk2::Window->new('toplevel');
$window2->set_default_size( 300, 450 ); # Tamaño inicial
$window2->set_border_width( 5 ); # Tamaño del borde
my $usr_entry = Gtk2::Entry->new;
$usr_entry->set_text ("Ingresar Usuario");
my $buscar_btn = Gtk2::Button->new_from_stock('Buscar');
$buscar_btn->signal_connect( clicked => sub{
my args->{results} ='shift';
my @listado; #### suponemos que @listado tiene algún elemento
my $resultwidget = Gtk2::SimpleList->new(
name => 'text' #la lista solo tendría una columna
);
foreach (@listado) {
###eh aquí uno de los tantos intentos por poder poner los datos
###del array en la lista....
push @{$resultwidget->{data}},"$_";
print "$_"; ###En la consola me imprime bien los datos
}
$args->{results}=$resultwidget;
});
my $vbbox = Gtk2::VButtonBox->new;
$vbbox->set_layout( 'start' );
$vbbox->set_spacing( 1 );
$vbbox->add($usr_entry);
$vbbox->add($buscar_btn);
my $frame = Gtk2::Frame->new( ' Resultados ' );
$frame->set_border_width( 5 );
$frame->set_size_request( 200, 200 );
my $sc = Gtk2::ScrolledWindow->new;
$sc->set_policy( 'automatic', 'automatic' );
$sc->add($args->{results});
$frame->add( $sc );
my $vbox = Gtk2::VBox->new( FALSE, 1 );
$vbox->pack_start($vbbox, FALSE, FALSE, 1 );
$vbox->pack_end($frame, 1, 1, 0 );
$window2->add( $vbox );
$window2->show_all;
El problema reside en poner los datos del arreglo @listado en la lista $resultwidget y hacer que ese resultado se vea desde fuera de la subrutina invocada al hacer clic en el botón "buscar". Espero que quede claro lo que trato de explicar. ¡Muchas gracias y saludos!
|
2011-12-08 16:07 @713 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10268
|
|
|
Re: Pasar datos de un array a una simplelist
|
Bienvenido a los foros de Perl en español, 60N2410. Cambia las líneas 25 a 30 por esta línea: Using perl Syntax Highlighting push @{$resultwidget->{data}}, [ @listado ];
Sacado de la sinopsis de la página de manual de Gtk2::SimpleList.
_________________ JF^D Perl programming
|
2011-12-08 16:34 @732 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Re: Pasar datos de un array a una simplelist
|
¡Muchas, pero muchas gracias por responder y con esa rapidez! Hice lo que me has dicho y debajo dejé el foreach() solo con un print() para ver el contenido del arreglo y cambié la lista para ahora tener 2 campos... Te muestro la salida que me da el programa al hacer el cambio: Using text Syntax Highlighting gonzalo.astorga SI
gonzalo.barbieri NO
gonzalo.bermudez NO
gonzalo.capo SI
gonzalo.fernandez SI
gonzalo.garcia SI
gonzalo.lippo SI
gonzalo.marquez NO
gonzalo.milans SI
gonzalo.niz NO
can't set value for column 2, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 3, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 4, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 5, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 6, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 7, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 8, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252.
can't set value for column 9, model only has 2 columns at /usr/lib/perl5/Gtk2/SimpleList.pm line 252. No logro que se muestre ningún resultado en la ventanita todavía y ¡no sé por qué quiere setear 9 valores! Perdón por las molestias y ¡muchas gracias!
|
2011-12-08 16:51 @743 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10268
|
|
|
Re: Pasar datos de un array a una simplelist
|
Sin ver el contenido del arreglo, es difícil decirlo. Los mensajes de error creo que se refiere a que el arreglo contiene datos para nueve columnas, pero la simplelist solo tiene dos. Usando Data::Dumper podemos ver la verdadera estructura de @listado. O copia aquí la parte del código donde le das los valores a @listado.
_________________ JF^D Perl programming
|
2011-12-09 09:03 @418 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Re: Pasar datos de un array a una simplelist
|
¡Buenos días! Declaración de la lista: Using perl Syntax Highlighting my $resultwidget = Gtk2::SimpleList->new(
Usuario => 'text',
Correo => 'text',
);
Los valores a @listado se los doy así: Using perl Syntax Highlighting my $uid; #uid es el nombre de un usuario.....
if (condición){
push @list , "$uid SI";
}else{
push @list , "$uid NO";
}
Contenido del arreglo @listado con Dumper: Using perl Syntax Highlighting $VAR1 = 'gonzalo.astorga SI';
$VAR2 = 'gonzalo.barbieri NO';
$VAR3 = 'gonzalo.bermudez NO';
$VAR4 = 'gonzalo.capo SI';
$VAR5 = 'gonzalo.fernandez SI';
$VAR6 = 'gonzalo.garcia SI';
$VAR7 = 'gonzalo.lippo SI';
$VAR8 = 'gonzalo.marquez NO';
$VAR9 = 'gonzalo.milans SI';
$VAR10 = 'gonzalo.niz NO';
Mirando bien esto, creo que está mal para lo que quiero hacer... Mi idea es poner en el primer campo de la lista el usuario y en el segundo campo de la lista el valor "SI" o "NO". Pero no logro mostrar nada en la lista, ni siquiera teniendo un solo valor en el arreglo. Quizás no logro ver bien el valor de la lista fuera de la subrutina. ¡Muchas gracias!
|
2011-12-09 10:13 @467 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10268
|
|
|
Re: Pasar datos de un array a una simplelist
|
Pues tienes razón, te he dado una mala solución. A ver... si se trata de que tiene que haber dos columnas, primero hay que partir cada valor en esas dos columnas. Using perl Syntax Highlighting my @listado = (
'gonzalo.astorga SI',
'gonzalo.barbieri NO',
'gonzalo.bermudez NO',
'gonzalo.capo SI',
'gonzalo.fernandez SI',
'gonzalo.garcia SI',
'gonzalo.lippo SI',
'gonzalo.marquez NO',
'gonzalo.milans SI',
'gonzalo.niz NO',
);
for my $entrada (@listado) {
my($nombre, $correo) = split " ", $entrada; # partimos por el espacio en blanco
push @{$resultwidget->{data}}, [ $nombre, $correo ]; # agregamos una fila más, con dos columnas
}
Ahora sí que debería funcionar...
_________________ JF^D Perl programming
|
2011-12-09 12:50 @576 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Re: Pasar datos de un array a una simplelist
|
¡Hola! Ahora mi problema cambió... Using perl Syntax Highlighting my $buscar_btn = Gtk2::Button->new_from_stock('Buscar');
$buscar_btn->signal_connect( clicked => sub{
.......
#esta subrutina me genera un arreglo @resultado con los datos
#tal y como me lo has dicho anteriormente
});
Con el arreglo generado en la subrutina necesito, fuera de ella, generar la lista para desplegarla en pantalla en una scrolledwindow dentro de un frame. El problema reside en que no puedo leer el arreglo generado en la subrutina fuera de la misma, ya he intentado pasarla por parámetro y no he tenido suerte. Disculpas por tantas preguntas pero es que son mis primeras experiencias en Perl. ¡Un saludo desde Uruguay! Muchas gracias.
|
2011-12-12 14:51 @660 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Re: Pasar datos de un array a una simplelist
|
¡Hola! Me acabo de dar cuenta de que el problema no es leer el arreglo fuera de la subrutina, sino que al hacer clic en el botón que me llama a la subrutina, el programa nunca sale de ella. Por ejemplo: Using perl Syntax Highlighting .......
my $buscar_btn = Gtk2::Button->new_from_stock('Buscar');
my @listado=("A");
$buscar_btn->signal_connect( clicked =>
sub{
my ($args,@listado )= @_ ;
foreach (@listado){
print "$_\n";
}
push @listado , "gonzalo", "NO";
print "1\n";
foreach (@listado){
print "$_\n";
}
print "2\n";
return TRUE;
}, [$args,@listado]);
print "3\n"
foreach (@listado){
print "$_\n";
}
.......
Y la salida del programa es: Using text Syntax Highlighting 3 #Al abrir el programa
A
ARRAY(0x8ee27d8) #Al hacer click en el botón Buscar
1
gonzalo
NO
2 #Nunca llega a imprimir 3 y queda esperando a que haga click
ARRAY(0x8ee27d8) #Al hacer click nuevamente en el botón Buscar
1
gonzalo
NO
2 #Nunca llega a imprimir 3
No puedo imprimir @listado luego de la subrutina porque nunca sale de ella, queda como en un "loop" dentro de la subrutina, es muy raro esto. Saludos.
|
2011-12-12 15:38 @693 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10268
|
|
|
Re: Pasar datos de un array a una simplelist
|
El '3' no sale porque está fuera de la subrutina. Cuando el programa llega al Gtk2->main, es el Gtk el que toma todo el control y no continúa a partir de ese punto. La subrutina que debe gestionar la pulsación del botón siempre recibe dos escalares: el nombre del widget, y los datos. Repito: escalares. Eso quiere decir que la parte de datos del usuario no es una lista de valores, sino una referencia a esa lista. La lista la podemos indicar como una lista anónima, como la tienes puesta, pero también como un hash anónimo ( ver ejemplos). Entonces, la forma correcta de pasar @listado a la subrutina, debería ser así (no probado): Using perl Syntax Highlighting $buscar_btn->signal_connect(
clicked =>
sub {
my $boton = shift;
my $ref = shift; # Referencia a la lista de datos
my @listado = @{$ref}; # Sacamos una copia de los datos en un nuevo @listado local
foreach (@listado){
print "$_\n";
}
return;
},
\@listado # Pasamos la ref. a nuestro @listado
);
_________________ JF^D Perl programming
|
2011-12-12 16:58 @748 |
|
|
60N2410
Perlero Nuevo
|
Registrado: 2011-12-08 15:16 @678 Mensajes: 13
|
|
|
Re: Pasar datos de un array a una simplelist
|
Muchas gracias por la ayuda, ¡un fenómeno! ¡¡Ahora si me salió!! ¡Saludos! PD: Seguramente me tengas de nuevo por acá... ¡je!
|
|
Página 1 de 1
|
[ 11 mensajes ] |
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|