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;