Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Updating one option menu by the value of another

by converter (Priest)
on Apr 29, 2003 at 11:13 UTC ( #253937=note: print w/replies, xml ) Need Help??

in reply to Updating one option menu by the value of another

You need to assign the widget references returned by the constructors to variables so that your first Optionmenu can invoke the second Optionmenu's configure() method to configure the -options attribute.

Give this code a try and see if it works for you. You'll have to replace the list of directories assigned to @myArr with directory names that exist on your system.

#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::widgets qw( Label Optionmenu ); my $mw = tkinit; my $selectedDir; my @files; my $path = '.'; my @myArr = qw(foo bar); my $myFile; my ($Label1, $OptMenu1, $Label2, $OptMenu2); $Label2 = $mw->Label(-text => "level2 "); # no -options: we'll let $OptMenu1 configure -options $OptMenu2 = $mw->Optionmenu( -textvariable => \$myFile, ); $Label1 = $mw->Label(-text => "level1 "); $OptMenu1 = $mw->Optionmenu( -textvariable => \$selectedDir, # -command is invoked when the widget is # allocated and when a selection is made: -command => sub { # redirect the output of ls(1) to /dev/null unless # you want stderr output on the console @files = `ls $path/$selectedDir 2>/dev/null`; #foreach (@files) { chomp() } chomp @files; # chomp() take a LIST warn 'configure $OptMenu2'; # who needs a debugger? $OptMenu2->configure(-options => \@files); }, -options => \@myArr, ); $Label1->grid($OptMenu1, $Label2, $OptMenu2); MainLoop;

Minor speeling correction.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2021-04-16 00:29 GMT
Find Nodes?
    Voting Booth?

    No recent polls found