amorphia has asked for the wisdom of the Perl Monks concerning the following question:

Hi all,
I have a bunch of data files I need to go through and make certain changes to. I thought this would be a good opportunity to learn some perltk and write a gui interface for my editor program. Unfortunately now that I start trying to use it for real, I realise that it is really slow because I wrote it in a stupid way. The particular supidity is that every time I move to a different part of the file to edit, I destroy my mainwindow and make a new one with:

my $main = MainWindow->new;

to display the different part of the file. Unfortunately this happens really slowly (the windows have a lot of widgets in but just getting a new mainwindow at all seems to be slow) It really would more more hassle than it is worth to rewrite the way the code fundamentally works. But what I am wondering is, is there any kind of cunning way to, I don't know, keep things in memory or something, so that it isn't so slow to make a new mainwindow?

Cheers,
Ben

Edited by davido: Added formatting tags to match original input formatting.

Replies are listed 'Best First'.
Re: help me speed up badly designed perltk code?
by chromatic (Archbishop) on Dec 17, 2004 at 18:19 UTC

    The only way I can think of is the solution you've discarded. Sorry.

    The last time I used a Tk textarea, though, it took only about half an hour from looking for how to handle scrolling to having it working. Are you sure it'll take as much time as you expect?

Re: help me speed up badly designed perltk code?
by zentara (Cardinal) on Dec 18, 2004 at 11:55 UTC
    I have no clue what you are trying to do, by destroying your mainwindow. It is possible,and probably easy, to make Tk work fast for editing a bunch of files, but you need to explain in more detail what you need to do.

    As to giving you some clues, based on guessing what you want, there is the toplevel window, for creating and removing windows quickly.

    #!/usr/bin/perl + use Tk; + $mw = MainWindow->new; + $mw->title("MainWindow"); + $mw->Button(-text => "Toplevel", -command => \&do_Toplevel)->pack( ); + + MainLoop; + sub do_Toplevel { + if (! Exists($tl)) { + $tl = $mw->Toplevel( ); + $tl->title("Toplevel"); + $tl->Button(-text => "Close", + -command => sub { $tl->withdraw })->pack; + } else { + $tl->deiconify( ); + $tl->raise( ); + } + }

    I'm not really a human, but I play one on earth. flash japh