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

Re^3: Dynamically add Optionmenus based on variable perl tk

by pashanoid (Scribe)
on Jul 29, 2011 at 08:15 UTC ( [id://917407]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Dynamically add Optionmenus based on variable perl tk
in thread Dynamically add Optionmenus based on variable perl tk

I've written up this example:

#!/usr/bin/perl use strict; use warnings; use Tk; my $mw = MainWindow->new; $mw->geometry("300x300"); my $var =1; my ($major, $other); my @options = ('one', 'two', 'three', 'four', 'five'); my $topics1=$mw->Radiobutton(-text =>'Selection 1', -value => '0', -variable => \$major, -command => sub {&do_smth('1')})->pack( +); my $topics2=$mw->Radiobutton(-text =>'Selection 2', -value => '1', -variable => \$major, -command => sub {&do_smth('2')})->pack() +; my $topics3=$mw->Radiobutton(-text =>'Selection 3', -value => '3', -variable => \$major, -command => sub {&do_smth('3')})->pack() +; if ($var eq 'more'){ my $options=$mw->Optionmenu( -options => [@options], -variable + => \$other, -command => [sub {&do_more($major, $other);}])->pack() +; } MainLoop; sub do_smth{ my $selection = shift; $var='more' unless ($selection == 2); } sub do_more{ my ($major, $other) = @_; print "do this: $other while Selection was $major\n"; }

How do I make the extra Optionmenu to appear when choice 2 is called?

Replies are listed 'Best First'.
Re^4: Dynamically add Optionmenus based on variable perl tk
by Anonymous Monk on Dec 07, 2011 at 23:03 UTC
    In the latest release of Tk you can use $options->options() to reset the list whenever you like. Here is my version of your test case
    #!/usr/bin/perl use strict; use warnings; use Tk; my $mw = MainWindow->new; $mw->geometry("300x300"); my $var =1; my ($major, $other); my @options = ('one', 'two', 'three', 'four', 'five'); my $topics1=$mw->Radiobutton(-text =>'Selection 1', -value => '0', -variable => \$major, -command => sub {&do_smth('1')})->pack( +); my $topics2=$mw->Radiobutton(-text =>'Selection 2', -value => '1', -variable => \$major, -command => sub {&do_smth('2')})->pack() +; my $topics3=$mw->Radiobutton(-text =>'Selection 3', -value => '3', -variable => \$major, -command => sub {&do_smth('3')})->pack() +; my $options=$mw->Optionmenu( -options => [@options], -variable => \$ot +her, -command => [sub {&do_more($major, $other);}])->pack() +; MainLoop; sub do_smth{ my $selection = shift; if ($selection == 2) { $options->options ([@options, 'six' , 'seven']) } else { $options->options ([@options] ) } $var='more' unless ($selection == 2); } sub do_more{ my ($major, $other) = @_; print "do this: $other while Selection was $major\n"; }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://917407]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2024-04-24 04:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found