In order to do this you need to pass around a reference. Here's a working (albeit barebones) script to demonstrate this:
#!/usr/bin/env perl
use strict;
use warnings;
use Tk;
my $tissue = 'plasma';
my $mw = MainWindow->new;
my $f1 = $mw->Frame()->pack;
$f1->Label(-textvariable => \$tissue)->pack;
$f1->Button(-text => 'Select Tissue', -command => sub { select_tissue(
+\$tissue) })->pack;
$f1->Button(-text => 'Quit', -command => sub { do_end(\$tissue) })->pa
+ck;
MainLoop;
sub select_tissue {
my $tissue_ref = shift;
# Tissue selection code here - assume 'muscle' selected
$$tissue_ref = 'muscle';
return;
}
sub do_end {
my $tissue_ref = shift;
# Print to STDOUT for demo purposes
print "$$tissue_ref\n";
exit;
}
Notes:
-
$tissue needs to be declared in a scope that's visible to the -command coderefs.
-
The callbacks have a reference to this variable, i.e. \$tissue.
-
The callbacks return nothing!
-
The value of $tissue is accessed or modified via $$tissue_ref.
-
Most widgets that have a -text option also have a -textvariable option.
Here I've used a Label - it starts with the default vaue of "plasma",
If you click the "Select Tissue" button, the Label text will change to "muscle".
-
The output (when you click "Quit") will depend on whether or not the "Select Tissue" button was pressed.
Update: fixed title s/Perk Tk/Perl Tk/
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.