代码之家  ›  专栏  ›  技术社区  ›  Jazz

如何在GUI中显示Perl控制台输出?

  •  8
  • Jazz  · 技术社区  · 16 年前

    我有几个简单的Perl程序写入标准输出,但这有一些问题:

    • 我的一些用户被控制台吓坏了
    • cmd 控制台,因此我无法控制它的显示方式(颜色和终端大小),更糟糕的是,控制台无法调整大小(至少在宽度上)

    为了解决这些问题,我希望能够在一个简单的GUI界面中显示输出作为一个选项。在程序完成之前,GUI应该是响应的(应该可以在运行时滚动或调整窗口大小)。

    我可以使用什么简单的工具箱和小部件来实现这一点(我使用ActivePerl在Windows上开发。

    5 回复  |  直到 9 年前
        1
  •  10
  •   Adam Bellaire    16 年前

    您可以使用任何您喜欢的GUI选项,然后您可以使用 Tie::STDOUT 重新定义 print 和 printf 将输出转储到您选择的小部件中。唯一的问题是,使用匿名子包让它干净地跨包与您的小部件通信可能会很麻烦。下面是一个简短、粗糙的示例,使用 Win32::GUI :

    use Win32::GUI();
    use Tie::STDOUT 
        print => sub {
            $main::textfield->Append(@_);
        };
    
    my $main = Win32::GUI::Window->new(
            -name => 'Main',
            -text => 'Perl',
            -width => 220,
            -height => 230,
        );
    our $textfield = $main->AddTextfield(
            -name   => "Output",
            -left   => 8,
            -top    => 8,
            -width  => 180,
            -height => 180,
            -readonly => 1,
            -multiline => 1,
            -vscroll => 1,
        );
    $main->Show();
    sub Main_Terminate {
            -1;
    }
    
    
    if(!fork()) {
        print "Hello.\n";
        for (1..20) {
          sleep 1;
          printf "More output %d\n", $_;
        }
    } else {
        Win32::GUI::Dialog();
    }
    

    注意对 Win32::GUI::Dialog()

        2
  •  6
  •   monksy    16 年前

    通过快速搜索,您确实有几个选项:

    1. Perl with NCurses (这是一个GUI,但它将其保存在控制台中)
    2. wxPerl
    3. PerlTK
    4. GTK与Perl(请参阅wikibooks参考资料)

    wikibooks reference

        3
  •  4
  •   Eric Strom    16 年前

    如果你在机器上安装了Firefox,我一直在开发这个模块 XUL::Gui 它允许您使用Firefox的渲染引擎显示Perl gui。基于亚当的答案:

    use XUL::Gui;
    use Tie::STDOUT 
        print => sub {$ID{text}->value .= join '' => @_};
    
    display Window title=>'Perl', minwidth=>640, minheight=>480,
        TextBox( FILL SCROLL id=>'text', multiline=>'true' ),
        delay {
            print "hello world\n";  # Output goes to the window.
            for (1..5) {
                printf "More output %d\n", $_;
            }
        };
    

        4
  •  1
  •   draegtun    16 年前

    wxWidgets 使用 Wx CPAN模块目前在Perl世界很流行(参见 Padre

    不过,我不确定ActivePerl是否会附带此功能,我相信它可能会附带 Tk 相反

    /I3az/

        5
  •  0
  •   user1067305    9 年前

    顺便说一句,它不允许鼠标输入,但如果您只是显示程序进度,它可能就足够了。

    另一种可能是用html/javascript重写程序,并具有完整的交互功能。

    我经常用perl完成我的繁重工作,然后构造并编写一个html程序用于用户交互。

    或者有一个标准的html程序,让perl在调用html程序之前写出一个包含特定数据的json文件。