IBM®AIX®操作系统管理员和开发人员通常使用Perl语言,几乎在每个成功的网站和大多数AIX系统上都可以找到它。 尽管Perl脚本功能强大,但它们产生的Web界面缺少图形化前端,并且用户必须键入信息而不是使用鼠标,这对于客户而言可能是令人不满意的体验。 通过在Perl中引入Tk模块已经解决了该问题。 管理员或开发人员可以使用Tk模块快速为其Perl脚本注入新的活力,并满足客户对X11产品的需求。

什么是Perl?

Perl(即实用提取和报告语言)由Larry Wall于1987年创建,旨在简化他的编程工作。 从概念开始,Perl就已经发展成为一种全球使用的语言,并且是大多数管理员和开发人员的必备内容。

什么是Perl / Tk模块?

Perl / Tk模块,也称为pTk或ptk,是一个Perl模块,旨在创建小部件和其他常用图形对象以形成图形用户界面(GUI)。 使用该模块创建GUI可以增强程序的外观,并帮助最终用户浏览该程序及其功能。 使用Perl / Tk模块的一个主要优点是生成的应用程序可以跨平台,这意味着同一GUI应用程序可以在UNIX®,Linux®,Macintosh,Microsoft®Windows®或具有以下功能的任何其他操作系统上使用已安装Perl和Perl / Tk模块。

在哪里获得Perl / Tk模块

在使用Perl / Tk模块编写应用程序之前,必须验证是否已安装Perl和Perl / Tk模块。 尽管Perl通常安装在计算机上,但Perl / Tk模块却不是。 验证是否已安装Perl的一种方法是在命令行中键入perl --version 。 如果未安装Perl,请参考Perl网站上的安装指南(请参阅参考资料 )。

在计算机上找到或安装Perl之后,下一步就是确定是否需要安装Perl / Tk模块。 验证是否已安装模块的一种简单方法是在命令提示符下键入perl -e "use module " 。 要验证是否安装了Perl / Tk模块,请执行以下命令:

perl -e "use Tk"

如果找到该模块,该命令将执行并返回到命令提示符。 但是,如果找不到该模块,则会显示类似于以下内容的错误消息:

Can't locate Tk.pm in @INC (@INC contains: /opt/ActivePerl-5.8/site/lib /opt/ActivePerl-5.8/lib .) at -e line 1.BEGIN failed--compilation aborted at -e line 1.

请记住,Perl区分大小写: perl –e "use Tk"perl –e "use tk"是两个不同的语句,试图使用两个不同的模块(Tk和tk)。

如果找不到该模块,则下一步是下载并安装它。 您可以通过以下两种方式进行操作。

如果您使用的是UNIX或Linux,则下载和安装Perl模块的一种方法是使用综合Perl存档网络(CPAN)。 在命令提示符下键入以下内容:

perl –MCPAN –e shellinstall Bundle::CPANreload cpaninstall Tk

如果使用Windows,则类似的方法是使用Perl程序包管理器(PPM)。 在命令提示符下,键入ppm以启动GUI并下载Tk模块。

安装完成后,通过执行perl –e "use Tk"验证Perl是否可以找到该模块。

创建一个窗口

现在,计算机已经安装了Perl和Perl / Tk模块,是时候通过该模块编写第一个GUI程序了。 您将从一个简单的Hello World程序开始。 使用您喜欢的文本编辑器,创建一个名为helloworld.pl的文件,然后在该文件中输入以下文本:

#!/usr/bin/perl -w# Display Hello World programuse Tk;use strict;my $mw = MainWindow->new;$mw->geometry("200x100");$mw->title("Hello World!!!");$mw->Label(-text => 'Hello World')->pack();$mw->Button(-text => "Close", -command =>sub{exit})->pack();MainLoop;

执行此脚本将生成GUI应用程序,如下图1所示。

图1. Hello World示例

让我们逐行分解该脚本:

#!/usr/bin/perl -w

第一部分( /usr/bin/perl )定义Perl可执行文件在计算机上的位置,并指示计算机使用Perl可执行文件的此副本来执行helloworld.pl文件。 该行的第二部分( -w )是Perl中的一个有价值的工具:它在执行脚本时启用警告,将发现的任何可能的错误通知最终用户。

在执行时不应该进行评估的注释和文本的前面加上八角形或#符号:

# Display Hello World program

为了使Perl脚本使用Tk模块,必须将其包括在内-换句话说, use Tk 。 将use strict语句添加到Perl脚本中还有助于查找任何可能的错别字或逻辑错误:

use Tk;
use strict;

要创建应用程序的主窗口,请使用MainWindow并将其分配给$mw$mw充当所有其他小部件的父级:

my $mw = MainWindow->new;

将主窗口的大小设置为200 x 100,然后将窗口命名为“ Hello World !!!:”。

$mw->geometry("200x100");
$mw->title("Hello World!!!");

在主窗口内创建一个标题为Hello World的标签。 标签创建的最后是一个附加功能pack ,即几何管理器。 它在小部件上用于计算在小部件的父级上分配的空间; 它还显示小部件:

$mw->Label(-text => 'Hello World')->pack();

该行在主窗口内创建一个“关闭”按钮。 通过鼠标单击激活或通过键盘执行时,此按钮退出Perl脚本:

$mw->Button(-text => "Close", -command =>sub{exit})->pack();

同样,由于此按钮占用了主窗口上的空间,因此您需要使用pack函数来计算所使用的空间。

在执行MainLoop之前,将读取,定义脚本中的所有内容,并准备执行它们。 然后,当调用MainLoop时,将执行该点之前读取的所有功能和数据,并显示GUI。

MainLoop;

小部件

本节介绍小部件。 它涵盖了一些基本的小部件,并提供了每个小部件的示例,包括框架,文本,条目,按钮和标签。

什么是小部件?

小部件是执行特定功能的图形对象。 Perl / Tk模块中的任何图形对象都可以视为小部件。 当想到GUI应用程序时,按钮,文本,框架和滚动条都是小部件。

以下小部件示例为本文稍后讨论的小部件奠定了基础。

框架小部件的确切名称是:框架或盒子。 该框架用于对其他小部件进行分组。

输入以下脚本:

#!/usr/bin/perl -wuse Tk;
use strict;my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Frame Test");$mw->Frame(-background => 'red')->pack(-ipadx => 50, -side => "left", -fill => "y");
$mw->Frame(-background => 'blue')->pack(-ipadx => 50, -side => "right", -fill => "y");MainLoop;

执行此脚本时,它将生成GUI应用程序, 如图2所示。

图2.框架小部件示例

让我们分解一下脚本:

#!/usr/bin/perl -wuse Tk;
use strict;my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Frame Test");
…
…
MainLoop;

在上一个示例中讨论了这一部分,因此让我们继续进行新的语句。

创建一个以主窗口为父窗口的框架,并将背景色设置为红色。 与前面的pack方法示例不同,其中包括一些选项:

$mw->Frame(-background => 'red')->pack(-ipadx => 50, -side => "left", -fill => "y");

第一个参数ipadx将帧的宽度增加100(50 x 2)。 第二个参数side ,将框架的几何位置调整为其父级( $mw )的左侧。 第三个参数沿y方向(垂直)在框架中分配空间。

该框架与前一个框架相似,但是背景为蓝色,并且位置在主窗口的右侧:

$mw->Frame(-background => 'blue')->pack(-ipadx => 50, -side => "right", -fill => "y");

文本

文本小部件将创建一个可编辑的文本工作区。 输入以下脚本:

#!/usr/bin/perl -wuse Tk;
use strict;my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Text Test");$mw->Text(-background => 'cyan', -foreground => 'white')->pack(-side => "top");MainLoop;

执行脚本并在窗口中键入将生成GUI应用程序, 如图3所示。

图3.文本小部件示例

在此示例中,将使用主窗口作为父窗口来创建文本窗口小部件:

$mw->Text(-background => 'cyan', -foreground => 'white')->pack(-side => "top");

不仅更改背景颜色,还更改前景字体颜色。 与往常一样, pack方法用于分配空间并显示小部件。

条目

输入小部件与文本小部件相似,您可以在小部件中编辑或输入文本。 文本小部件可让您输入多行文本,而输入小部件则仅允许单行文本。

输入以下脚本:

#!/usr/bin/perl -wuse Tk;
use strict;my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Entry Test");$mw->Entry(-background => 'black', -foreground => 'white')->pack(-side => "top");MainLoop;

执行脚本并在窗口中键入将生成GUI应用程序, 如图4所示。

图4. Entry小部件示例

文本小部件和此小部件之间的唯一区别是小部件名称:

$mw->Entry(-background => 'black', -foreground => 'white')->pack(-side => "top");

但是,如示例所示,您只能提供一行文本。

纽扣

按钮小部件创建一个按钮,当最终用户激活该按钮时,该按钮可以执行功能或命令。 几乎所有图形程序都包含按钮,因此熟悉按钮小部件非常方便。

下面的示例使用三个按钮。 第一个标为“按钮1”的按钮显示消息“ 按钮1” ,并按“确定”按钮。 第二个标记为Button 2的按钮显示消息Button 2 ,同时按下 Yes和No按钮询问用户是否要退出程序。 根据单击哪个按钮,将显示一条新消息,指出单击了是或否按钮,程序退出了还是不退出。

这是示例脚本:

#!/usr/bin/perl -wuse Tk;
use strict;my $mw = MainWindow->new;
$mw->geometry("200x100");
$mw->title("Button Test");my $button1 = $mw->Button(-text => "Button #1", -command => \&button1_sub)->pack();my $button2 = $mw->Button(-text => "Button #2", -command => \&button2_sub)->pack();sub button1_sub {$mw->messageBox(-message => "Button 1 Pushed", -type => "ok");
}sub button2_sub {my $yesno_button = $mw->messageBox(-message => "Button 2 Pushed. Exit?",-type => "yesno", -icon => "question");$mw->messageBox(-message => "You pressed $yesno_button!", -type => "ok");if ($yesno_button eq "Yes") {$mw->messageBox(-message => "Ok, Exiting.", -type => "ok");exit;} else {$mw->messageBox(-message => "I didn't think so either.", -type => "ok");}
}MainLoop;

执行脚本将生成GUI应用程序,如图5至11所示。

图5. Button小部件示例
图6.单击按钮1
图7.单击按钮2
图8.未单击任何按钮
图9.确认没有单击按钮
图10.单击是按钮
图11.单击是按钮的确认

该脚本比前面的示例更复杂,但是,如果将其分解,则跟其他示例一样容易遵循。 首先,创建每个按钮并为其分配适当的文本( Button #1Button #2 )。 每个按钮都链接到命令或功能。 子例程被适当地称为button1_subbutton2_sub

my $button1 = $mw->Button(-text => "Button #1", -command => \&button1_sub)->pack();my $button2 = $mw->Button(-text => "Button #2", -command => \&button2_sub)->pack();

单击$button1 ,将执行子程序button1_sub 。 在此功能内部,将创建一个消息框,其中显示文本Button 1 Pushed,并带有标记为OK的单个按钮。 由于没有对“确定”按钮执行任何进一步的评估,因此消息框被破坏,主窗口重新获得焦点。

sub button1_sub {$mw->messageBox(-message => "Button 1 Pushed", -type => "ok");
}

此子例程与第一个子例程相似,不同之处在于它包含标记为“是”和“否”的两个按钮。用户单击按钮后,将出现一个新的消息框,指出他们单击了哪个。 然后,显示另一个消息框,指出程序是否正在退出:

sub button2_sub {my $yesno_button = $mw->messageBox(-message => "Button 2 Pushed. Exit?",-type => "yesno", -icon => "question");$mw->messageBox(-message => "You pressed $yesno_button!", -type => "ok");if ($yesno_button eq "Yes") {$mw->messageBox(-message => "Ok, Exiting.", -type => "ok");exit;} else {$mw->messageBox(-message => "I didn't think so either.", -type => "ok");}
}

标签

标签是不可编辑的文本小部件。 在文本框和输入框之前,标签可能很有用。 输入以下示例脚本:

#!/usr/bin/perl -wuse 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.标签小部件示例

第一行使用文本名称创建标签。 您叫什么名字? :

$mw->Label(-text => "What's your name?")->pack(-side => "left");
$mw->Entry(-background => 'black', -foreground => 'white')->pack(-side => "right");

要将标签放置在条目小部件的左侧,您可以将pack设置为与左侧对齐。 与前面的示例一样,创建具有黑色背景和白色背景的条目小部件。 要将条目放置在标签窗口小部件的右侧,请将pack设置为与右侧对齐。

放在一起

现在您已经熟悉了一些小部件,下面将它们放到一个脚本中:

#!/usr/bin/perl -wuse 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 => \&copy_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;

执行此脚本将生成GUI应用程序, 如图13所示。

图13.多合一示例

让我们像其他示例一样分解它。 首先,构建一个主框架,并在其中构建三个框架。 这些框架包含其他小部件,并保持一切井井有条:

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 => \&copy_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");

您还创建了一个文本小部件,以便用户可以从条目小部件中复制文本并在必要时进行编辑。

这些函数是clear和copy子例程:

sub clear_entry {$paste_text->delete('0.0', 'end');
}sub copy_entry {my $copied_text = $copy_entry->get();$paste_text->insert("end", $copied_text);
}

clear_entry函数删除从0.0或行0字符0开始直到小部件末尾的所有文本。 copy_entry函数在输入窗口小部件中获取文本并将其插入到文本窗口小部件中。

结论

将带有Perl / Tk模块的Perl引入AIX环境可以使开发人员,管理员以及客户或最终用户受益。 您可以将看起来对客户而言乏味的脚本增强为外观专业的GUI应用程序。 挂起这些小部件可能要花一些时间,但是,一旦掌握了这些小部件,就值得付出努力和时间了!


翻译自: https://www.ibm.com/developerworks/aix/library/au-perltkmodule/index.html

perl/tk_Perl / Tk的基础相关推荐

  1. Perl正则表达式(1) - 正则表达式基础知识

    Perl正则表达式 1. 基础知识 Perl中正则表达式(regular expression)默认匹配 $_ 中的字符串,匹配成功就返回真,否则返回假: Perl匹配正则表达式时,可以使用变量内插, ...

  2. Perl/Tk入门学习(上)

    由于项目需求,要编写程序的GUI界面,脚本程序使用Perl,因此选用Perl/Tk模块来实现GUI.初次接触Perl/Tk模块,自我摸索过程中,欢迎大家交流与指正. 目标:编写一个程序的使用界面,具体 ...

  3. perl 安装html,centos perl 安装HTML-Parser时报错

    新装了centos7,安装perl模块时,发现系统自带的perl很多基础的包都没安装(是基础perl的阉割版本,甚至失去了很多重要的基础包 http://www.perlmonks.org/?node ...

  4. 关于perl中中文乱码的解决办法

    今天在测试lwp模块的时候,发现读取的网站内容含有中文的输出后都是乱码,于是学习了一下perl的Encode模块,写一下总结,做个备忘,也希望能对其他的朋友有帮助! 先来学习一下perl中编码的基础知 ...

  5. 大型电商架构亿级流量电商详情页系统实战--redis基础票

    亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构 01_高并发高可用复杂系统中的缓存架构有哪些东西 (1)如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据 ...

  6. perl 代码《2》

    #!/usr/bin/perl use Tk; use DBI; use encoding 'euc_cn'; ###创建窗体 my $mw = MainWindow->new(-title = ...

  7. LaTex排版一二三

    文章目录 @[toc] 引言 LaTex环境配置 软件包选择与安装 LaTex或TeX排版软件 安装 编辑器 LaTex排版基础 参考文献 使用技巧 插入eps图片 脚注 特殊符号 数学字体 问题解决 ...

  8. 你还在这样学习Python吗?真的不可以

    众所周知 ,现在Python确实非常火,语言功能及其强大,可以干很多很多事情,而且也是数据分析,机器学习,人工智能第一语言.目前好的Python程序员特别是机器学习方面的薪水非常高,我非常明白和理解这 ...

  9. Redis架构第二天:CenterOS集群、RDB和AOF、主从复制架构实践

    1.课程 小型电商:页面静态化 页面太多的时候,上亿,重新渲染,需要几天,不太靠谱 大型电商:异步+多级缓存+nginx本地化动态渲染 高并发.高可用,qps 总之一句话redis很重要.龙国学院很屌 ...

最新文章

  1. 设置TabBar分栏控制器上图片的大小问题
  2. 读史记晋国世家0808:春秋平头哥
  3. Windows上卸载SqlServer数据库
  4. Android开发之基本概念
  5. 广义表的学习(原理和代码)
  6. 怎样查看cudnn版本_tensorflowGPU版本踩坑记录
  7. 《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一第 3 章 理性模型有哪些缺陷...
  8. ans函数python_#12 Python函数
  9. 最小二乘法2阶拟合数据
  10. Linux安装winetim简单教程,[转载]wine安装最新版TIM
  11. 视频直播方案(加强版
  12. PR视频剪辑(项目包装)
  13. 英语中最常用的252个词根
  14. Python 内建函数 - complex([real[, imag]])
  15. 八大排序算法--堆排序
  16. Axmath:一款Word公式编辑神器
  17. A. Sequence with Digits
  18. 揭秘你所看不见的技术原理 - 游戏世界服
  19. tp5 mysql实现消息队列_thinkphp5 tp5 queue消息队列使用方法
  20. 小家电开发工具元器件清单

热门文章

  1. excel简单操作学习记录1-2021/2/6
  2. 五本珍稀数学电子书出售
  3. 在线升级:OTA升级的原理和实现方式
  4. 光速入门消息队列Kafka
  5. (转)三款免费Win7系统摄像头录制工具
  6. 有线网络(网关等)和无线网络通信(蓝牙跳频通信等)讲解
  7. nslookup 查邮件服务器地址
  8. 图片上传回显,并以clob数据类型存入数据库
  9. 计算机试题上网部分怎么做,考试经验之谈:计算机一级考试上网题怎么操作?...
  10. open-set recognition(OSR)开集识别的一些思考(二)