#!/usr/local/bin/perl use strict; use Tk; my $obj; my $fp; my $info; my $entframe; #Creating the Main Widow my $wind = new MainWindow; $wind->title("Main Window"); my $frame = $wind->Frame()->pack; $frame->Button(-text => 'New Window', -command =>\&newwin) ->pack(-side =>'left', -ipady => 5, -pady=>15); MainLoop; sub newwin { if(! Exists($obj->{mw})) { $obj = bless {mw => $wind->Toplevel()}; $obj->{mw}->title("Child Window"); $obj->{mw}->minsize(qw(200 200)); #The entered text will be the title of the next toplevel window my $frm = $obj->{mw}->Frame()->pack(-side => 'top' ); $frm->Label(-text=>"Enter the Toplevel Name")->pack(); $frm->Entry(-textvariable =>\$fp)->pack(); $obj->{frame1} = $obj->{mw}->Frame()->pack(); $obj->{frame1}->Button(-text => 'CREATE', -command =>[\&Create_Window, $obj])->pack(-side =>'left', -ipady => 5, -pady=>15); } else { $obj->{mw}->deiconify (); $obj->{mw}->raise (); } } #Creating the Toplevel window sub Create_Window { my $self = $_[0]; my $Obj_Id = $fp ; if (Exists ($self->{windows}{$Obj_Id}{win})) { $self->{windows}{$Obj_Id}{win}->deiconify (); $self->{windows}{$Obj_Id}{win}->raise (); return; } $info = $self->{windows}{$Obj_Id} = {}; $info->{win} = $wind->Toplevel(); my $path = $wind->toplevel; $info->{win}->title($fp); $info->{win}->minsize(qw(200 200)); $info->{win}->focus(); $info->{$entframe} = $info->{win}->Frame()->pack(-side => 'top' ); $info->{$entframe}->Entry()->pack(); $info->{$entframe}->Entry()->pack(); $info->{frame} = $info->{win}->Frame()->pack(-side => 'bottom' ); $info->{frame}->Button(-text => 'Refresh', -command =>[\&refresh, $self, $Obj_Id])->pack(-side=>'left'); $info->{frame}->Button ( -text => 'Close', -command => [\&closeChild, $self, $Obj_Id] )->pack(-side=>'left'); } #Close the particular Child Window sub closeChild { my ($self, $winId) = @_; my $title = $self->{windows}{$winId}{win}->cget(-title); $self->{windows}{$winId}{win}->destroy (); delete $self->{windows}{$winId}; } #Refresh the particular Child Window sub refresh { my ($self, $winId, $f) = @_; if (Exists($info->{$entframe})) { $info->{$entframe}-> destroy() ; } ############################################################# #Here i am unable to get the reference of the toplevel window $info->{$entframe} = $self->{windows}{$winId}{win}->Frame()->pack(-side => 'top' ); $info->{$entframe}->Entry()->pack(); }