in reply to Missing base classes when called from Tk

It boggles my mind when I try to convert a regular Tk script to an OO one. But make sure you use Tk::Derived and set your Super so $mw gets passed in. Look at this simplified example.
#!/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;

I'm not really a human, but I play one on earth. Cogito ergo sum a bum

Replies are listed 'Best First'.
Re^2: Missing base classes when called from Tk
by perl-diddler (Chaplain) on Sep 28, 2007 at 07:08 UTC
    Since this is my first Tk prog I haven't done too much converting. I think the fact that I want to do more work on the GUI is one of the driving my feeling that I want the program in an OO form before I go forward...:-)?

    I haven't gotten to the point of doing anything complicated in Tk. No objects based in Tk (yet). Right now I'm leaning toward abstracting the Tk-specific parts, toward eventually allowing other windowing systems.
    L