in reply to Perl-Tk Notebook - add a new tab to exisitng $mw

Re: TK: adding notebook tabs dynamically
  • Comment on Re: Perl-Tk Notebook - add a new tab to exisitng $mw

Replies are listed 'Best First'.
Re^2: Perl-Tk Notebook - add a new tab to exisitng $mw
by shankar.chandra (Initiate) on Sep 12, 2016 at 22:56 UTC
    Hi, thanks for the answer. If I execute ./example.pm (your sample code) for the second time, my $top = MainWindow->new( ); is again executed. Iam not using $top that I created before or? my problem is exactly this. my code will be fully recreated. i will lose my $top. i can save the $top hash to a file but I don't know to recreate the $top reading from the file, if this could be a solution.

      Hi,

      Now I understand what you're talking about

      Yup, once program ends, everything is gone

      When running program again , your program has to recreate everything, every window tab text .... and load all the content into it

      See ->parent and ->children from Tk::Widget , use it to find all the children of a mainwindow, and with a bit of recursion, all their childrens children ...

      Also get Tk::WidgetDump , use it for figuring out Tk

        Hi, first thanks for your replies. It helps me to move ahead instead stagnant. But then, I get errors like

        XStoSubCmd: Not a Tk Window Tk::die_with_trace at /perl_install/lib/Tk/Submethods.pm line 37

        Tk::MainWindow=HASH(0xa56e270) is not a widget

        I did a miniature of my code to get a 'hello' success:

        I run this with $window->Label(-text=>"Hello 1")->pack(); and then $window->Label(-text=>"Hello 2")->pack(); to print bothe Hello 1 and 2 in the same window, but I get errors on second run.

        use Tk; use Tk::Widget; #use Tk::WidgetDump; use Data::Dumper; use Storable; use B::Deparse; $Storable::Deparse=1; use Storable qw(freeze thaw); use Safe; #use strict; my $safe = new Safe; # because of opcodes used in "use strict": $safe->permit(qw(:default require)); local $Storable::Deparse = 1; local $Storable::Eval = sub { $safe->reval($_[0]) }; sub ShowLog { my $window; if(-e "mainwindow.store") {$window=retrieve("mainwindow.store");} if(!defined($window)) {$window = Tk::MainWindow->new();} if(defined($window)) { $window->Label(-text=>"Hello 1")->pack(); store \%{$window}, "mainwindow.store"; } MainLoop(); }

        with trial and error , 300+ google clicks etc makes me a bit tierd. I want to give up but then quite sure this cannot be that difficult to do, but could be i am making it difficult ? help?

        So I understood that there is no chance to reuse my previously created window. dumb question: is it not possible to save "Tk::MainWindow=HASH(0xa1eeed8)" like this to a file and re-create the window handler in next run?