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

Venerable Monks

I have built a Perl App with modules with Perl Tk as the GUI and am making an executable out of it (so normal users with no Perl knowledge can use it at my work). These modules will use the print command and with Tk I grab the output of the print command and post it in a Tk scrolled text box. These outputs are statuses as the modules run, so that if any problems happen, I can more easily figure out where they are at or the user can validate the information that is processing. This is similar to when you install most programs and you can see the details of the files they are creating when you click the Show Details button while the program is in the install wizard. When they click the button and the module is called, the print outputs are not posted to the scrolled text box until the module is complete or if the module fails, they don't populate the scrolled text box with anything.

Is there a way to dynamically post prints to the Tk scrolled text box as the module prints them instead of doing it once the module has completed (or not at all if the module fails)?

Thank you for your wisdom

  • Comment on Dynamically Filling Text Box from Perl Tk

Replies are listed 'Best First'.
Re: Dynamically Filling Text Box from Perl Tk
by thundergnat (Deacon) on Nov 04, 2011 at 18:12 UTC

    You probably want to implement some kind of update routine that is called periodically. See perldoc Tk::after for details.

    #untested, incomplete, adjust to your particular needs sub install_module { my $updater = $top->repeat(500, \&update); do { install module }; $updater->cancel; } sub update { my $output = get_output_from_wherever(); $scrolled_text->insert('end', $output); $top->update; }
      tie *STDOUT, 'Tk::Text', $tx;

      To make sure all the output goes to that scrolled text box. I just need this to do it as the module is running and not when it is done. I am taking a look at Tk::after with the hopes of getting that to work. Any other suggestions or recommendations on the best way to dynamically post print to this scrolled text box will be appreciated

        I don't really understand what you are trying to do, can you show a minimum code example? Otherwise, maybe Tie::Tk::Text may be useful.
        #!/usr/bin/perl use warnings; use strict; use Tk; use Tie::Tk::Text; my $mw = MainWindow->new; my $w = $mw->Text()->pack(); tie my @text, 'Tie::Tk::Text', $w; $w->insert('end', "foo\nbar\nbaz\n"); print $text[1]; # "bar\n" MainLoop;

        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku ................... flash japh
Re: Dynamically Filling Text Box from Perl Tk
by choroba (Cardinal) on Nov 04, 2011 at 21:19 UTC