#! /usr/bin/perl use warnings; use strict; use Tk; my %widgets; my $mw = MainWindow->new(); my @type_of_processing = ( "type1", "type2", "type1", "type1", "type2" ); for my $step_no ( 1 .. 5 ) { settings( $step_no, $type_of_processing[ $step_no - 1 ] ); } MainLoop; sub settings { my ( $step, $type ) = @_; $widgets{label}{$step} = $mw->Label( -text => "This is processing step no. $step. ($type)" )->pack; $widgets{entry}{$step} = $mw->Entry( -width => 20, -state => 'disabled' )->pack; $widgets{checkbutton}{$step} = $mw->Checkbutton( -text => "export results to: ", -variable => \$widgets{status}{$step}, -command => [ sub { if ( $widgets{status}{$step} == 1 ) { $widgets{entry}{$step}->configure( -state => 'normal' ); } else { $widgets{entry}{$step}->configure( -state => 'disabled' ); } }, $_[0] ] )->pack( -before => $widgets{entry}{$step} ); }