perl tk说明

介绍:

perl/Tk(也被称为pTK) 是一个模块和代码的收集,尝试 简单的配置Tk 8 部件工具包到强大的词素文文字,

动态内存,I/O, 和面向对象,它是一种解释脚本语言 来制作部件和程序 使用GUI


Perl 或者 提取和报告语言是有Larry Wall设计, perl的作者,如下:


Hello World:

让我们开始,作为其他教程的开始, 以"Hello World"程序创建一个文件 叫做Hello.pl

键入下面的内容到它这里:

#!/usr/local/bin/perl
use Tk;
# Main Window
my $mw = new MainWindow;
my $label = $mw -> Label(-text=>"Hello World") -> pack();
my $button = $mw -> Button(-text => "Quit",
-command => sub { exit })
-> pack();
MainLoop;

第一行 #!/usr/local/bin/perl 在Windows里是不需要 在Linux 它告诉脚本语言过程的名字


第2行 use TK, 告诉解释器 我们的程序使用Tk模块  这行是必须的 在所有的GUI 程序里

当解释器遇到这行时,它会加载tk组件 来创建项目。


第三行  这是一行注释  任何行以#开始的是一个注释是不被程序使用的

这是用于程序员来交流的 一个程序员不能被期望记住一个脚本的任何东西

因此使用一个注释来写下 在下次它需要编辑的时候,他可以读注释和了解程序

第四行,my $mw = new MainWindow; 会创建一个windows 窗体 GUI元素会被放置

变量$mv 是MainWindow类型的一个对象 , 我们需要这个元素当我们需要放置任何部件的时候


第五行 $mw -> Label(-text=>"Hello World") -> pack();

标记为标签和写"Hello world" ,你可以改变文本到任何你想要标注的命令结构

$label 这个变量分配到特定的部件 部件必须有一个唯一的变量

这个名字可以用于当部件被访问

$mv->  $mv 是一个MainWindow 的部件 我们需要放置我们的label部件在这个窗体内

Label(-text=>"Hello World") 'Label' 是一个部件的名字,一个部件是一个用户接口对象 在图形用户接口?


只是说 它是对象的名字出现在屏幕里,这里有很多其他部件 如果你需要显示一个按钮,你使用按钮部件

对于文本,你使用文本部件 对于entry ,entry 部件如果你需要,你可以看到更多的部件。

­text=>"Hello World" 这个选项的部件是说 这个部件必须给定文本 "Hello World"选项
改变根据部件

一个按钮部件没有label部件的所有的选项

请注意  操作用在这里'=>' 相对于早期使用的'->' 在$mw -> 

一个使用 减号  另外一个使用=号  两者不要混淆。

你可以保持写其他的选项 可以可以写在这里比如,让我们做一个label 用于显示文本框’Hello World"

另外行 类似于Hello World 程序


在这个例子,更多的选项被使用 font选项告诉font 必须被使用来让text 和relief 选项告诉

text 是否出现为raised, sunken, flat 等等 对于一个特定的部件,

阅读手册 它列出了每个部件和每个选项, 如果你想要用Perl编程,


所有的选项 必须通过逗号分隔,但是你需要指出,这个行是有点难度的  当大量的选项增加时,

$mw -> Label(-text=>"Hello World",
-font=>"courierfont",
-relief=>"raised")
-> pack();

接下来是 ->pack();

这个会pack 部件  '$label' 到windows  '$mw' 


 ’pack' 是一个部件管理器
 
 另外一个布局期是'grid',对于个人来说 grid 相对更好,  把所有这些放在一行 会很难受,你可以放在下一行
 
 my $label = $mw -> Label(-text=>"Hello World")
-> pack();

在这种情况下,  pack 没有选项 ,但不总是这样。

my $label = $mw -> Label(-text=>"Hello World")
-> pack(-side=>"left",
-anchor=>'w');


你没有 pack部件在相同行,但是它是方便与小的程序 ,你可以稍后pack部件 使用部件的变量:

my $label = $mw -> Label(-text=>"Hello World"); #We created the widget
$label -> pack(-side=>"left", -anchor=>'w'); #We pack it in another line


因此 我们有最终的语法 如何创建和显示一个部件:

my $WidgetVariable = $Window -> WidgetType(?Option 1=>Value 1, ?Option 2=>Value
2 ??) -> pack()

下面的3行:
my $button = $mw -> Button(-text => "Quit",
-command => sub { exit })
-> pack();

将创建和显示一个按钮 ,部件变量 是'$button'  当我们查看这个选项时候,

我们会找到两个选项 'text' 和 'command'   给出的text 是Quit

因此按钮会有一个text "Quit" 在它上面 命令选项确定 上面应该发生 当用户clik 按钮,

你可以指定一个函数来执行,当用户clicks 一个按钮 在这种情况下


程序会退出 当这个按钮被执行

你可以调用函数,你已经创建的。


#!/usr/local/bin/perl
use Tk;
# Main Window
my $mw = new MainWindow;
my $label = $mw -> Label(-text=>"Hello World") -> pack();
my $button = $mw -> Button(-text => "Quit",
-command =>&exitProgam)
-> pack();
MainLoop;

sub exitProgam {
###弹出一个消息框
$mw->messageBox(-message=>"Goodbye");
exit;
}

下一行-MainLoop;

是主循环或者Event Loop 它的工作是调用callbacks 来响应events

比如 button 按下或者定时器触发, 如果这行丢失,

程序会允许,退出 不等待用户做任何事情, 这是另外一种 Tk程序必须的

Widgets 1 : Button, Entry, Label 按钮,Entry,标签

一个widget 是一个用户接口对象 在X 图形用户接口?

我们只是说 它是对象的名字,出现在屏幕上

这里有很多类型部件 如果你要显示一个按钮, 这里有很多部件类型

如果你要显示一个按钮,你使用按钮部件

比如文本框,你使用文本框部件

输入框, entry 部件

my $WidgetVariable = $Window ­> WidgetType(?Option 1=>Value 1, ?Option 2=>Value 2 ??) ­> pack();


三件事情需要说明 关于部件

首先是 部件变量,

第一件事是 部件变量  我在之前已经解释了 所有部件的部件变量

必须是一个唯一的,被使用 当部件需要被2次访问

每个部件有一些选项,可以用来配置

这通常当部件被定义时就被做了,但是也可以后面做

最后的事情是命令 每个部件有一些命令,可以用于配置或者让它做一些事情。


但是在我们开始之前, 我们需要知道一个关于pack命令的东西

pack 是一个布局管理器另外一个布局管理器是'grid'

我们后面会解释 pack 是更加简单的相比grid


Button:

这个会使一个按钮来执行一些代码,当按钮被执行 这个通常指向一个函数

因此当按钮被点击后,这个函数会运行一个按钮 这个按钮时创建使用HTML 输入tag:

一些选项:

­text=>"TEXT"                TEXT 会被显示在按钮上

­command=>CALLBACK           CALLBACK 当按钮被点击时被调用

#!/usr/local/bin/perl
use Tk;
# Main Window
my $mw = new MainWindow;
my $but = $mw -> Button(-text => "Push Me",
-command =>&push_button);
$but -> pack();
MainLoop;
#This is executed when the button is pressed
sub push_button {
whatever
}

你可能已经注意到 我是用了一个 slash()  在这个命令回调

Entry: 输入框


一个entry 是一个部件 显示一个一行文本字符串,允许用户输入和编辑文件 当一个entry

已经输入 显示一个插入光标来表明 新的字符会被插入

一个entry 元素 显示如下:

一些选项:

­width=>NUMBER                            输入域的宽度 应该是一个整数

­textvariable=>$VARIABLE                 变量 VARIABLE 的内容 会显示在部件,如果text 在部件被编辑,
                                          变量会被自动编辑
        
­state=>STATE                             属于域的状态可以是normal,disabled, or readonly
                                           如果 是只读的 text不能被编辑
            
一些命令:

语法:                               描述                                      Example

$widget ­> get();                   文本在输入域可以通过这个命令拿到           $name = $ent ­> get();


$widget ­> delete(FIRST?,LAST?);   

entry FIRST 删除一个或者多个元素

FIRST 是 第一个字符的索引来删除

LAST 是最后字符在最后一个来删除的index

如果last 没有被指定 默认是FIRST +1,


ie 是一个单独的字符 被删除 这个命令返回一个空的字符串

$widget ­> insert(index,"STRING"); 

插入的字符串在 通过Index 之前的字符  index是0 对于第一个字符 

end 可以用于最后的字符

#!/usr/local/bin/perl
use Tk;
use strict;
# Main Window
my $mw = new MainWindow;
my $button = $mw-<Button(-text=<"Show Quit Dailog", -command =< &exitTheApp)-<pack();
sub exitTheApp {
my $response = $mw -< messageBox(-message=<"Really quit?",-type=<'yesno',-
icon=<'question');
if( $response eq "Yes" ) {
exit
} else {
$mw -< messageBox(-type=<"ok", -message=<"I know you like this application!");
}
}
MainLoop;

chooseColor:

选择颜色出现一个对话框,让用户选择颜色


getOpenFile

过程getOpenFile  和getSaveFile 出现一个对话框 让用户选择一个文件打开或者保存


getOpenFile 命令通常和打开命令在文件菜单里有关系

它的目的是让用户选择一个存在的文件 ,只有用户输入一个非空的文件,

对话框 给用户一个错误提示,需要用户用户给出一个可控选择的 如果应用允许用户创建一个文件

它应该通过提供一个单独的新的menu命令


getSaveFile 命令通常和Save as 命令联系在一起 在文件菜单

如果用户输入一个文件 已经存在的, 对话框提示用户确认 当文件存在 是否应该覆盖

一些选项:

­initialdir=>DIRNAME     

指定目录应该被显示的 当对话框弹出 如果参数没有被指定,

目录在当前网络 工作目录是被显示 如果参数指定了一个相对路径,返回值转换相对路径为绝对路径


­defaultextension=>EXTENSION

指定一个字符串会被附加到文件名 如果用户属于一个文件没有扩展名

默认 值是一个空的字符串,意味着没有扩展 会被追加到文件名。

­filetypes=>filePatternList

Toplevel 顶层

toplevel 是一个部件 可以用于创建一个自定义的对话框

一个toplevel 类似于一个窗体 除了toplevel是创建为一个top-level 窗体。


它的X父窗体是屏幕的root windows 相比逻辑父窗体

主要目的是作为一个容器 用于对话框 和其他部件的容易


可以使用toplevel 来创建新的窗体 ,一个部件可以布局在topvele里

Widgets 3 : Radiobutton, Checkbutton


单选按钮:

Radiobutton是一个属于 从多个选项中选择其中一个  如果一个选择和另外一个其他的按钮被点击,

最后的选择会丢失它的状态,被点击的按钮会被选择

Widgets 4 : Listbox  列表框部件:

列表框:

一个列表框 是显示一个字符串的列表,一行一个 ,一个新的列表框没有元素


元素可以被增加或者删除使用部件命令描述如下:

部件:  菜单按钮,菜单,选项按钮

Menubutton  菜单按钮:


一个菜单按钮是一个部件显示一个文本的字符串,bitmap,或者图片和菜单部件相关的

一些其他部件 画布,消息,调节器,滚动条

画布:

canvas 部件是非常重要的部件, 因为所有的点是在图形绘图区域

画图部件实现了结构化的图形 ,一个画布显示 任何条目的数量,

像是长方形 ,圆形,线条,和文本项目


Message  消息:

一个消息框 是一个部件显示一个文本字符 很像 label 部件,但是可以用于制造一个多行文本

合法的选项 指定如何证明文本行必须是left,center或者right  默认是to left

这个选项和anchor 选项一起工作

Adjuster  调节器:

一个调节器 表现为frame 部件  ,一个显著的例外

便捷可以被拖动和扩展

这个部件包含任何数目的窗体, 水平或垂直排列,


Scrolled 滚动条:

Geometry Management : Grid, Pack  部件管理器 Grid 和Pack


grid 

grid 命令是用于个grid布局管理器联系在一起, 部署部件按行和列,

被称为 部件master(或者master window)

grid 命令可以有几种构成,依赖选项参数:

一些选项:

­sticky => STYLE

这个选项可以用于安置(或者拉伸) 部件 在他的单元格里

包含了0或者多个字符 n,s,e或者w

每个字母 指向一边(north, south,east, or west) 

slave会放置 如果n和s 都被指定,slave会延伸来填满整个高度或者宽度

­ipadx => AMOUNT

指定水平内部填充的数量 在slave的每一边, 这个空间是被增加在slave的边界

指定垂直内部填充的数量 在slave的每一边,类似于ipadx


­padx => AMOUNT  指定水平外部填充的数量 在每个slave的两边,

在屏幕单元 AMOUNT可以是2个值得列表来指定 填充 对于单独的left和right

­pady => AMOUNT

指定多少垂直外部填充 来预留top和bottom

Some Common Widget Options  一些公用的部件选项:

大写字母必须被任何粗体的字母替换, 检查手册对于所有的选项

确保你是用的部件支持你使用的选项:

­anchor=>POSITION    安置部件相对的位置:n ne nw s se sw e w 或者center


­background=>COLOR    背景色

­borderwidth=>WIDTH   边界宽度 选择0 会隐藏边界

­command=>SCRIPT  当被调用时 执行脚本

­cursor=>CURSOR     鼠标光标显示当鼠标点击这个部件


disabledforeground=>COLOR       前段颜色 当部件被禁用时

­font=>FONTNAME              前段当部件的状态是nornal


Some Tk Commands  一些Tk命令:

Bind:

bind 命令相关的perl代码 ,如果你要做一些事情当用户双击了一个item 在一个列表框或者

当他按了任何按钮, binds 是你需要让绑定一些在下面的例子:


 

原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6200347.html