了解 Perl/Tk 模块--Perl/Tk 基础知识
http://tech.ddvip.com 2007年11月20日 社区交流
内容摘要:尽管基于 Perl 的 Web 接口存在局限性,但 Perl 仍是最常用的 Web 开发语言之一。在 Shell 脚本、Perl 或其他语言方面有编程经验的 UNIX? 用户可通过使用 Perl/Tk 模块为基于 Perl 的 Web 接口带来新的生机。
标签
标签 是一个不可编辑的文本小部件。在文本框和入口框之前,标签框非常有用。请输入下面的示例脚本:
#!/usr/bin/perl -w
use Tk;
use strict;
my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Entry Test");
$mw->Label(-text => "What's your name?")->pack(-side => "left");
$mw->Entry(-background => 'black', -foreground => 'white')->pack(-side => "right");
MainLoop;
执行此脚本将生成 GUI 应用程序,如图 12 所示。
图 12. 标签小部件示例

第一行创建一个带有文本 What's your name? 的标签:
$mw->Label(-text => "What's your name?")->pack(-side => "left");
$mw->Entry(-background => 'black', -foreground => 'white')->pack(-side => "right");
若要将该标签定位到入口小部件的左侧,可以将pack设置为左对齐。与前面的示例一样,入口小部件是使用黑白背景创建的。若要将入口定位到标签小部件的右侧,可将pack设置为右对齐。
实际运用
现在您已经熟悉了几个小部件,下面我们将在一个脚本中实际应用它们:
#!/usr/bin/perl -w
use Tk;
use strict;
my $mw = MainWindow->new;
$mw->geometry("500x200");
$mw->title("All-In-One Test");
my $main_frame = $mw->Frame()->pack(-side => 'top', -fill => 'x');
my $top_frame = $main_frame->Frame(-background => "red")->pack(-side => 'top',
-fill => 'x');
my $left_frame = $main_frame->Frame(-background => "black")->pack(-side => 'left',
-fill => 'y');
my $right_frame = $main_frame->Frame(-background => "white")->pack(-side => "right");
$top_frame->Label(-text => "All-In-One Test!",
-background => "red")->pack(-side => "top");
$left_frame->Label(-text => "Enter text to copy", -background => "black",
-foreground => "yellow")->pack(-side => "left");
my $copy_entry = $left_frame->Entry(-background => "white",
-foreground => "red")->pack(-side => "left");
my $copy_button = $left_frame->Button(-text => "Copy Text",
-command => ©_entry)->pack(-side => "right");
my $clear_text = $right_frame->Button(-text => "Clear Text",
-command => &clear_entry)->pack(-side => "top");
my $paste_text = $right_frame->Text(-background => "white",
-foreground => "black")->pack(-side => "top");
sub clear_entry {
$paste_text->delete('0.0', 'end');
}
sub copy_entry {
my $copied_text = $copy_entry->get();
$paste_text->insert("end", $copied_text);
}
MainLoop;
责编:豆豆技术应用