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

I would like to know how i can change one widget's properties,
from another widget's functions.
I would also like to know if i can pass the "mainwindow" to a function,
and modify it's widget's properties from the function.
For example:

$MainWindow_InFunction->widget_name->property=new value

Thanks for the time
  • Comment on changing a widget's properties from a function

Replies are listed 'Best First'.
Re: changing a widget's properties from a function
by zentara (Cardinal) on Jan 24, 2004 at 13:54 UTC
    This sounds like a real beginner question, or else I don't understand what you are asking. Almost all widgets can have callbacks associated with them. When you enter the callback subroutine, you can adjust any widget property you want, as long as you know it's name. It's usually done with
    $widgetname->configure(-this => 'that'); $someotherwidget->configure(-this => 'that'); $mw->configure(-this => 'that');
    Each widget has it's own methods so you have to read it's man page. There are some standards in perldoc Tk::options. The trick is to find the name of the widget you want to change. Alot of code have "widgets with no-names", for example, in the following the buttons are anonymous, but in the second example, the buttons are actually named as a variable.
    #!/usr/bin/perl use strict; use Tk; my $mw = MainWindow->new; for(0..4){ $mw->Button(-text => "Hello World$_", -command=>[\&change])->pack; } MainLoop; sub change { print "sub-input->@_\n"; my $caller = $Tk::widget; print "$caller "; print $caller->{'_TkValue_'},' '; my $text = $caller->cget('-text'); print "$text\n"; $caller->configure(-text=>"Hello Stranger"); } __END__
    #!/usr/bin/perl use strict; use Tk; my $mw = MainWindow->new; my $b = $mw->Button(-text => "Hello World", -command=>[\&change])->pack(); my $l = $mw->Label(-text => 'hi')->pack(); MainLoop; sub change { $b->configure(-text=>"Hello Stranger"); $l->configure(-text=>'bye'); }
      Hi Zentara

      You are correct - i am kind of a beginner in Tk,
      so your answer was a great help to me !

      Thanks Very much !