Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Problem Binding "Return" Key in Tk Program

by roho (Bishop)
on Jan 22, 2023 at 18:40 UTC ( [id://11149765]=perlquestion: print w/replies, xml ) Need Help??

roho has asked for the wisdom of the Perl Monks concerning the following question:

In the following SSCCE, the binding for "<Return>" is not calling the associated subroutine "Play" when the ENTER key is pressed for the selected Listbox entry.
Note that "<ButtonPress-3>" works fine when the selected Listbox entry is right-clicked.

What am I missing here? TIA

#!/usr/bin/perl use strict; use warnings; use Tk; my $mw = MainWindow->new(); $mw->geometry("300x100+20+20"); $mw->bind('<Escape> ' => sub{exit;}); $mw->configure(-title => 'Listbox "Return" Test'); my $lb = $mw->Scrolled( "Listbox", -scrollbars => 'oe', -selectmode => "single", -height => 15, -width => 35, )->pack(); $lb->insert('end', 'Name1'); $lb->insert('end', 'Name2'); $lb->insert('end', 'Name3'); $lb->selectionSet(1); $lb->bind('<ButtonPress-1>' => sub { Info($lb->get($lb->curselection() +)) }); $lb->bind('<ButtonPress-3>' => sub { Play($lb->get($lb->curselection() +)) }); ################################################### # *** Problem *** # "Return" binding does not call "Play" subroutine # when ENTER key is pressed. ################################################### $lb->bind('<Return>' => sub { Play($lb->get($lb->curselection())) }); MainLoop(); sub Info { my $name = shift; print "\n(Info)-Name: $name\n"; return; } sub Play { my $name = shift; print "(Play)-Name: $name\n"; return; }

"It's not how hard you work, it's how much you get done."

Replies are listed 'Best First'.
Re: Problem Binding "Return" Key in Tk Program
by tybalt89 (Monsignor) on Jan 22, 2023 at 19:42 UTC
    #!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11149765 use warnings; use Tk; my $mw = MainWindow->new(); $mw->geometry("300x100+20+20"); $mw->bind('<Escape> ' => sub{exit;}); $mw->configure(-title => 'Listbox "Return" Test'); my $lb = $mw->Scrolled( "Listbox", -scrollbars => 'oe', -selectmode => "single", -height => 15, -width => 35, )->pack(); $lb->insert('end', 'Name1'); $lb->insert('end', 'Name2'); $lb->insert('end', 'Name3'); $lb->selectionSet(1); $lb->bind('<ButtonPress-1>' => sub { Info($lb->get($lb->curselection() +)) }); $lb->bind('<ButtonPress-3>' => sub { Play($lb->get($lb->curselection() +)) }); ################################################### # *** Problem *** # "Return" binding does not call "Play" subroutine # when ENTER key is pressed. ################################################### $lb->focus; # NOTE $lb->bind('<Return>' => sub { Play($lb->get($lb->curselection())) }); MainLoop(); sub Info { my $name = shift; print "\n(Info)-Name: $name\n"; return; } sub Play { my $name = shift; print "(Play)-Name: $name\n"; return; }
      Thank you tybalt89! $lb->focus; was what I was missing. I didn't see that in the docs -- will take another look. It's working fine now. Thanks again.

      "It's not how hard you work, it's how much you get done."

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://11149765]
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (8)
As of 2024-04-23 09:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found