http://qs321.pair.com?node_id=1095058

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

Hi monks. So because I love pain I want to know if anyone else has found such a solution to this bug lack of functionality. The BrowseEntry which provides a drop down has 3 functions: insert, delete, and get. I want a fourth 'set', rather than defining yet another global var as I already pass the obj to insert/delete I would love to be able to '->set(0)' to set the current value to index 0 of the list. Any suggestions or pointing in the correct direction would be appreciated. Thank you for your time.

Replies are listed 'Best First'.
Re: Tk::BrowseEntry set function
by zentara (Archbishop) on Jul 25, 2014 at 16:45 UTC
    You don't show any code, but this should show you how to set things. You just set your array elements, and update. You can use ->configure to set -choices and -variable
    #!/usr/bin/perl use Tk; use Tk::BrowseEntry; use strict; my @choices = (1..50); my $choice = (@choices)[0]; our $dlg = MainWindow->new(); my $blist = $dlg->BrowseEntry( -choices => \@choices, -variable => \$choice)->pack; my $lb = $blist->Subwidget("slistbox"); $blist->configure(-listcmd=>sub{$lb->focus}); MainLoop;

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh
Re: Tk::BrowseEntry set function -solved
by glenn (Scribe) on Jul 25, 2014 at 19:44 UTC

    UPDATE: found problems with the previous code when having multiple BrowseEntry objects. This however works.

    #!/usr/bin/perl use Tk; use Tk::BrowseEntry; use strict; my $mw = MainWindow->new(); my $hddSel = $mw->BrowseEntry()->pack; foreach my $c (1..50) { $hddSel->insert("end",$c); } $hddSel->Subwidget("slistbox")->selectionSet(0); $hddSel->LbCopySelection($hddSel); #use the widgets internal method to + copy the selected value to the entry print "CURRENT VALUE: ".$hddSel->Subwidget("slistbox")->get((@{$hddSel +->Subwidget("slistbox")->curselection})[0])."\n"; MainLoop; sub getValue { my ($getW) = @_; return $getW->cget( '-textvariable' ); } sub setValue { my ($setW, $index) = @_; my $lb = $setW->Subwidget('slistbox')->Subwidget('listbox'); my $var_ref = $setW->cget('-textvariable'); $lb->selection('clear', 0, 'end'); $lb->selectionSet($index); $$var_ref = $lb->get($index); return; }