#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Tree; use Tk::Table; use Tk::Label; use Tk::Entry; my $mw = tkinit; my $tree = $mw->Tree( -browsecmd => \&change )->pack; my $table = $mw->Table->pack; my %labels = ( test => sub { my $wdgt = shift; return [$wdgt->Label( -text => 'test' ), $wdgt->Entry()] }, hallo => sub { my $wdgt = shift; return [$wdgt->Label( -text => 'hello world' ), $wdgt->Entry()] }, ); for my $key ( keys %labels ){ $tree->add( $key , -text => $key ); } MainLoop; sub change{ my $item = shift; $table->clear; my $widgets = $labels{$item}->($table); $table->put(0,$_, $widgets->[$_]) for 0..$#$widgets; # $labels{$item}->pack; }