我有几个简单的Perl程序写入标准输出,但这有一些问题:
cmd
控制台上,所以我无法控制它的显示方式(颜色和终端大小),更糟糕的是,控制台无法调整大小(在最小宽度)为了解决这些问题,我希望能够在一个简单的GUI界面中显示输出作为选项。 GUI应该响应直到程序结束(应该可以在窗口运行时滚动或调整窗口大小)。
我可以使用哪种简单的工具包和小部件来执行此操作? (我使用ActivePerl在Windows上开发。)
答案 0 :(得分:10)
您可以使用任何您喜欢的GUI选项,然后您可以使用Tie::STDOUT将print
和printf
的行为重新定义为STDOUT文件句柄,而不是将输出转储到窗口小部件中你的选择。唯一的事情就是让它使用匿名子程序干净地与你的小部件交谈可能会很麻烦。以下是使用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()
,以便在脚本完成后立即关闭窗口。
答案 1 :(得分:5)
通过快速搜索,您可以选择以下几种方法:
此外,还有一个wikibooks reference。
答案 2 :(得分:4)
如果您在计算机上安装了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", $_;
}
};
编辑:修复了来自gui的多行返回值的错误,上面的例子现在更好了。适用于XUL :: Gui 0.35 +
答案 3 :(得分:1)
答案 4 :(得分:0)
Win32 :: Console :: ANSI允许您控制背景和文本颜色和位置,以及命令行窗口的大小和标题。
AFAIK,它不允许鼠标输入,但如果你只是显示程序进度就足够了。
另一种可能性是用html / javascript重写程序并具有完全的交互功能。
我经常在perl中进行繁重的工作,然后构建并编写一个用于用户交互的html程序。
或者有一个标准的html程序,让perl在调用html程序之前用特定数据写出一个json文件。