#!/usr/bin/perl use warnings; use strict; use Tk; package ZCanTree; #without Tk::Derived the option -dooda will fail use base qw(Tk::Derived Tk::Canvas); Tk::Widget->Construct('ZCanTree'); sub ClassInit { my ($class, $mw) = @_; #set the $mw as parent $class->SUPER::ClassInit($mw); } # end ClassInit sub Populate { my ( $self, $args ) = @_; #------------------------------------------------------------------- #take care of args which don't belong to the SUPER, see Tk::Derived my $xtra_arg = delete $args->{-dooda}; #delete and read same time if( defined $xtra_arg ) { $self->{'dooda'} = $xtra_arg } #----------------------------------------------------------------- $self->SUPER::Populate($args); $self->{'can'} = $self->Canvas( )->pack(-expand=>1,-fill=>'both'); $self->Advertise( Canvas => $self->{'can'} ); print "2\n"; } sub get_dooda{ my $self = shift; return $self->{'dooda'}; } 1; package main; use Tk; my $mw = MainWindow->new; $mw->geometry("400x400"); my $canf = $mw->ZCanTree( -bg => 'black', -dooda => 42, )->pack(-fill=>'both',-expand=>1); my $button = $mw->Button( -text=>'Dooda', -command=> sub{ print $canf->get_dooda(),"\n" } )->pack(); my $button1 = $mw->Button( -text=>'Exit', -command=> sub{exit} )->pack(); Tk::MainLoop;