Oops, active is different from curselection
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11118320
use warnings;
use Tk;
{ # start package
package Tk::ListBox3;
use List::Util qw( first );
use base qw/ Tk::Frame /; # Frame-based composite
Construct Tk::Widget 'ListBox3'; # install MyNewWidget in pTk namespac
+e
sub Populate # called to build each widget instance
{
my($self, $args) = @_;
$self->SUPER::Populate($args);
my $frame = $self->Frame(
-borderwidth => 5, -relief => 'ridge',
)->pack(-fill=> 'both', -expand=> 1);
my $label = $frame->Label( -fg => 'blue', -font => 30,
)->pack(-fill => 'x');
my $lbox = $frame->Scrolled(Listbox => -scrollbars => 'se',
-height => 20,
-selectforeground => 'orange',
-selectbackground => 'steelblue4',
-exportselection => 0,
)->pack(-side => 'bottom', -fill => 'both', -expand=> 1);
$frame->Entry(
-validate => 'key', -validatecommand => sub
{
my ($want) = @_;
length $want or return 1;
my @list = $lbox->get(0 , "end");
my $item = first { $list[$_] =~ /^\Q$want\E/ } 0 .. $#list;
defined $item or return 0;
$lbox->selectionClear( 0 , "end" );
$lbox->selectionSet($item);
$lbox->see($item);
1 # to allow
},
)->pack(-fill => 'x');
$self->ConfigSpecs( DEFAULT => [$lbox], text => [$label],);
$self->Delegates( Construct => $lbox, insert => $lbox,
get => $lbox, curselection => $lbox );
}
} # end package
my @choices = sort qw /alpha beta charlie delta echo foxtrot hotel ind
+ia juliet
kilo lima motel nancy oscar papa quebec radio sierra tango uniform v
+ictor
whiskey xray yankee zulu oin gloin beorn gandalf elr ond eowyn/;
my $header_msg = "ENTER a KEY name: ";
my $selection;
my $mw = MainWindow->new;
$mw->geometry( '+900+250' );
$mw->title( 'Listbox' );
my $lb = $mw->ListBox3( -text => $header_msg,
)->pack(-fill => 'both', -expand => 1,);
$lb->insert( 'end', @choices );
$mw->Button(-text => 'QUIT', -bg => 'red', -command => sub {
$selection = $lb->get($lb->curselection);
$mw->destroy
},
)->pack(-fill => 'x');
MainLoop;
defined $selection and print "'$selection' was selected\n";
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.