Ray Smith has asked for the wisdom of the Perl Monks concerning the following question:
Is there a method to have Tk::Optionmenu start displaying the option list without having the user first click the button?
Question 2: Why does the Optionmenu callback function (localCall below) get called before the user click of Optionmenu button? Please look at my workaround.
Thanks
!/usr/bin/perl -w use strict; use warnings; # teest Tk::Menuoption use Tk; use Tk::Optionmenu; my $mw = new MainWindow; my $baseFrame = $mw->Frame()->pack( -side=>'top', -fill=>'both', -expand=>0); my $name_text = "phone name"; my $phoneNo = 51206; $baseFrame->Button(-text=>$phoneNo, -relief=>'flat', -cursor=>'hand1', -activeforeground=>'blue', -activebackground=>'white', -command => sub {phoneCmds( $baseFrame, $phoneNo);}, )->pack(-side=>'left'); my $cmdsFrame; my $cm; sub phoneCmds { my ( $baseFrame, $caller, ) = @_; my $deviceDN = $caller; print "caller(deviceDN)=$deviceDN\n"; $cmdsFrame = $baseFrame->Frame( )->pack( -side=>'left', -fill=>'both', -expand=>0); my @callees = qw/46001 46002 46003 46004/; my $callee; $cm = $cmdsFrame->Optionmenu(- -variable =>\$callee, -options => [@callees], -command => [\&localCall, $caller], ); $cm->pack(); } sub localCall { my ( $caller, $callee, ) = @_; return if !defined($callee); return if !defined($cm); print "localCall: caller=$caller callee = $callee\n"; $cm->destroy() if $cm && $cm->exists(); $cm = undef; $cmdsFrame->destroy() if $cmdsFrame && $cmdsFrame->exists(); # $cmdsFrame = undef; } MainLoop;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Tk:::Optionmenu startup displaying the optionlist ( tk optionmenu bug , event generate)
by Anonymous Monk on Feb 04, 2015 at 00:45 UTC | |
by Anonymous Monk on Feb 04, 2015 at 08:02 UTC |