• Publicidad

Duda con Listbox

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

Duda con Listbox

Notapor BigBear » 2010-06-14 16:45 @740

Hola tengo el siguiente código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Tk;
  2.  
  3. my @test = ("sdds","dfdf","dfdf");
  4.  
  5. my $new = MainWindow->new();
  6. $new->resizable(0,0);
  7. $new->title("Test");
  8. $new->geometry("300x350+20+20");
  9. $new->Label(-text=>"Test")->pack();
  10. my $lists = $new->Listbox()->place(-y=>"60",-x=>"80");
  11. $lists->insert('end',@test);
  12.  
  13. MainLoop;
  14.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Mi duda es cómo puedo reconocer qué frase se ha seleccionado en el listbox.

¿Alguien me puede ayudar?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Duda con Listbox

Notapor explorer » 2010-06-14 18:23 @807

Tienes que utilizar el método curselection(). Ejemplo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda con Listbox

Notapor BigBear » 2010-07-04 16:54 @746

Perdón, explorer, pero tengo otra duda. El código quedó así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Tk;
  2.  
  3. my @test = ("sdds","dfdf","dfdf");
  4.  
  5. my $new = MainWindow->new();
  6. $new->resizable(0,0);
  7. $new->title("Test");
  8. $new->geometry("300x350+20+20");
  9. $new->Label(-text=>"Test")->pack();
  10. my $lists = $new->Listbox()->place(-y=>"60",-x=>"80");
  11. $lists->insert('end',@test);
  12. $new->Button(-text=>"Cual",-command=>\&cual)->pack();
  13. MainLoop;
  14.  
  15. sub cual {
  16.     $d = $lists->curselection();
  17.     print "$d\n";
  18. }
  19.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero el código solo imprime un array (algo hex).

¿Cómo hago para que me muestre el texto seleccionado?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con Listbox

Notapor explorer » 2010-07-04 18:04 @794

Siempre hay que acordarse de los buenos amigos, cuando necesitas algo...

Con la ayuda de Data::Dumper, se descubre el interior de ese array:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     use Data::Dumper;
  2.     print Dumper $d;
  3.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sale algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = [
          '1'
        ];
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Así que el array guarda un número por cada elemento seleccionado. La forma de sacarlo es algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     for my $id (@$d) {
  2.         print "Indice: $id: ";
  3.         print $lists->get($id);
  4.         print "\n";
  5.     }
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con @$d estamos diciendo que queremos obtener los elementos del array referenciado por $d.

Este comportamiento es el indicado por el manual, en Tk::Listbox. En el apartado de la función curselection(), aparece:
Devuelve una lista conteniendo los índices numéricos de todos los elementos en el listbox que están actualmente seleccionados. Si no hay elementos seleccionados en el listbox entonces se devuelve una cadena vacía.

Aunque... mi amigo Data::Dumper dice que en este último caso, no es una cadena vacía, sino el valor indefinido (undef).

Así que la forma completa sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if (!$d) {
  2.         print "ninguno seleccionado\n";
  3.     }
  4.     else {
  5.         for my $id (@$d) {
  6.             print "Indice: $id: ";
  7.             print $lists->get($id);
  8.             print "\n";
  9.         }
  10.     }
  11.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
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 27 invitados