• Publicidad

Que botón se active con un enter

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

Que botón se active con un enter

Notapor BigBear » 2010-06-09 14:45 @656

Hola.

Tengo la siguiente duda, porque tengo una ventana Tk que tiene un botón para llamar una función, pero lo que yo quiero es que el botón se active con presionar un enter y no un clic.

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

Publicidad

Re: Que botón se active con un enter

Notapor explorer » 2010-06-09 15:56 @705

Si el botón tiene capturado el foco de atención, entonces sí que se activa al pulsar el botón de Entrar. O si está definido como botón por defecto del diálogo (-default) entonces se activa en caso de que el usuario pulse el botón de Entrar aunque no tenga el foco.
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: Que botón se active con un enter

Notapor BigBear » 2010-06-09 17:46 @782

Y como hago que un botón este por defecto del diálogo.

¿Me podrias explicar o dar un ejemplo?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Que botón se active con un enter

Notapor explorer » 2010-06-09 18:03 @794

Aquí tienes unos ejemplos, extraídos del libro "Mastering Perl/Tk".
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

Ayuda con mi ventana Tk

Notapor BigBear » 2010-06-11 16:56 @747

Hola.

Tengo la siguiente ventana:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Tk;
  2.  
  3. my $f  =MainWindow->new;
  4. $f->title("fdf");
  5. $f->geometry("400x400+20+20");
  6. $f->Button(-text=>"yeah",-command=>\&yd)->pack();
  7.  
  8. MainLoop;
  9.  
  10. sub yd {
  11.     $f->Label(-text=>"dfdfdff")->pack();
  12. }
  13.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Mi duda es cómo hacer que el botón esté por defecto para que con un simple enter se ejecute la función.

El problema es que no entendí bien cómo hacerlo siguiendo el enlace recomendado.

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

Re: Que botón se active con un enter

Notapor explorer » 2010-06-11 17:54 @787

Perdón por no ser tan claro, y además de haberte dado una mala respuesta.

Aquí tienes un ejemplo que funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Tk;
  3.  
  4. my $f  = MainWindow->new;
  5. $f->title("fdf");
  6. $f->geometry("400x400+20+20");
  7.  
  8. my $boton = $f->Button(-text=>"yeah", -command=>\&yd);
  9. $boton->pack();
  10.  
  11. $boton->focus();
  12.  
  13. MainLoop;
  14.  
  15. sub yd {
  16.     $f->Label(-text=>"dfdfdff")->pack();
  17. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El truco es el siguiente: le damos, desde el principio, el foco de atención al botón, por lo que recibirá las pulsaciones de la tecla Entrar (y de Espacio).

Pero el problema es si vas a hacer un diálogo más complicado, con más elementos de entrada. Entonces el foco se desplazaría a esos controles.

Otra solución es "unir" la llamada a una función cuando se produzca un determinado evento. En nuestro caso, ese evento es la pulsación de la tecla Return. Con el siguiente programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Tk;
  3.  
  4. my $f  = MainWindow->new;
  5. $f->title("fdf");
  6. $f->geometry("400x400+20+20");
  7.  
  8. my $boton = $f->Button(-text=>"yeah", -command=>\&yd);
  9. $boton->pack();
  10.  
  11. $f->bind('<Return>' => \&yd);
  12.  
  13. $f->focus();
  14.  
  15. MainLoop;
  16.  
  17. sub yd {
  18.     $f->Label(-text=>"dfdfdff")->pack();
  19. }
  20.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

ahora, al pulsar esa tecla, el evento es recogido por la ventana, y ejecutada la función yd().

Habría un problema: si el botón tiene el foco y pulsamos la tecla de entrada. Entonces la función yd() es llamada dos veces. Para solucionarlo, lo mejor es hacer el bind() no a la ventana, sino al widget que queremos que imite la pulsación. Podría ser una caja de texto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Tk;
  4.  
  5. my $mw = new MainWindow();
  6.  
  7. $mw->title ( 'Correo electronico' ) ;
  8.  
  9. $mw->Label ( -text => 'Introduzca su correo:' )
  10.    ->pack  ( -side => 'top' ) ;
  11.  
  12. my $resultado = $mw->Label()
  13.               ->pack ( -side => 'top' ) ;
  14.  
  15. $mw->Label ( -text => 'Su correo:' )
  16.    ->pack  ( -side => 'left' ) ;
  17.  
  18. my $entrada = $mw->Entry ( -width => 18 , -justify => 'left' )
  19.             ->pack( -side => 'left' );
  20. $entrada->bind('<Return>', sub { entradaAetiqueta($entrada, $resultado); } );    # magia
  21. $entrada->focus();
  22.  
  23. my $actualiza = $mw->Button ( -text => 'Actualiza', -default => 'active' )
  24.               ->pack( -side => 'bottom' ) ;
  25. $actualiza->configure ( -command => [\&entradaAetiqueta , $entrada , $resultado ] ) ;
  26.  
  27. my $cancela = $mw->Button ( -text => 'Cancelar' , -command => sub { $mw->destroy() } )
  28.             ->pack ( -side => 'bottom' ) ;
  29.  
  30.  
  31. MainLoop();
  32.  
  33.  
  34. sub entradaAetiqueta ( $$ ) {
  35.     my ( $entrada , $etiqueta ) = @_;
  36.     $etiqueta->configure ( -text => $entrada->get() ) ;
  37. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Con este ejemplo aparece la entrada de un texto sencillo. La caja de entrada ya tiene el foco y podemos empezar a escribir inmediatamente. Y al pulsar el botón de Entrar, se actualiza la etiqueta oculta. También funciona si movemos el foco de atención con la tecla tabulador y pulsamos sobre los botones con la barra de espacio o el Return.

(sacado de Linux Productivity Magazine, 2-2, febrero 2003)
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


Volver a Básico

¿Quién está conectado?

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