介绍:

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 是你需要让绑定一些在下面的例子:

perl tk说明的更多相关文章

  1. Chapter 1. Hello, Perl/Tk

    Chapter 1. Hello, Perl/Tk 内容: Perl/Tk Concepts Some Perl/Tk History Getting Started with Perl/Tk Hel ...

  2. Perl Tk在IC设计中的应用、Windows、Linux平台下的安装-各种错误的摸索解决

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <Perl Tk在IC设计中的应用.Windows.Linux平台下的安装-各种错误的摸索解决> Perl在IC设计中有 ...

  3. windows 下安装perl Tk 模块

    首先,安装activeperl ,安装过程中勾选自动添加PATH环境变量,这样安装后就不需要自己手动修改PATH环境变量: 通过cmd 调出命令行窗口,输入ppm ,然后回车,就开启了perl 的包管 ...

  4. Tk::Table

    <pre name="code" class="python"># DESCRIPTION # Tk::Table is an all-perl w ...

  5. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  6. Chapter 13. Miscellaneous PerlTk Methods PerlTk 方法杂项:

    Chapter 13. Miscellaneous PerlTk Methods PerlTk 方法杂项: 到目前为止,这本书的大部分章节 集中在特定的几个部件, 这个章节覆盖了方法和子程序 可以被任 ...

  7. Chapter 11. Frame, MainWindow, and Toplevel Widgets 框架,主窗体,顶级部件

    Chapter 11. Frame, MainWindow, and Toplevel Widgets   框架,主窗体,顶级部件 框架和Toplevels 都是设计用于其他部件的容器. 它们的不同在 ...

  8. Chapter 4. Button, Checkbutton, and Radiobutton Widgets 按钮,复选按钮,单选按钮

    Chapter 4. Button, Checkbutton, and Radiobutton Widgets   按钮,复选按钮,单选按钮 几乎所有的Perl/Tk 应用使用按钮以这样或者那样的方式 ...

  9. pack布局

    Chapter 2. Geometry Management 第2章 布局管理: 显示部件在屏幕上,他们必须被传递给布局管理器. 布局管理器 控制部件的位置和大小 在显示窗口,几个布局管理器是可用的在 ...

随机推荐

  1. BZOJ NOI十连测 第一测 T1

    思路:首先考虑t=1的情况,t等于1,那么所有位置的颜色相同,我们不用考虑概率的问题,那么,k+d*x在模d下都相等,我们考虑预处理一个数组s[i][j],代表d为i,起始位置为j的等差数列的和,这个 ...

  2. 从Hello, world开始认识IL <第一篇>

    IL代码分析方法 Hello, world历史 .NET学习方法论 1.引言 1988年Brian W.Kernighan和Dennis M.Ritchie合著了软件史上的经典巨著<The C ...

  3. 【转】如何检测wifi信号强度? -- 不错

    原文网址:http://jingyan.baidu.com/article/90895e0fe9616164ec6b0b88.html 当我们在使用wifi上网时,在某些角落会出现无wifi信号,或是 ...

  4. 2014.8.4我出的模拟赛【NTR酋长】

    NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长 ...

  5. [转]UltraISO制作U盘启动盘安装Win7/9/10系统攻略

    原文地址:http://www.cnblogs.com/pchmonster/p/4716708.html U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便 ...

  6. 如何区分监督学习(supervised learning)和非监督学习(unsupervised learning)

    监督学习:简单来说就是给定一定的训练样本(这里一定要注意,样本是既有数据,也有数据对应的结果),利用这个样本进行训练得到一个模型(可以说是一个函数),然后利用这个模型,将所有的输入映射为相应的输出,之 ...

  7. java编译相关问题总结

    参考:http://jingyan.baidu.com/article/5bbb5a1b080f6113eba179f0.html 1.在linux下生成的class文件/jar包,拿到windows ...

  8. cf#366....

    惨惨惨.... 我需要av.. b题意看错想了个加强版博弈结果发现完全没必要= =....cwa12到结束....中途想看d....只会n^4暴力啊.. 题解明天补上

  9. Hacker(四)----查看计算机的IP地址

    计算机接入Internet后,Internet就会给该计算机分配一个IP地址,若要查看该IP地址,可以借助度娘(百度,google)来实现.输入"IP地址查询"关键字,即可查看当前 ...

  10. idea maven 无法加载已经安装的模块

    新建了一下maven项目,下面新建了一个模块,某一个模块clean install之后,别的模块虽然使用dependency标签引入了,但是仍然无法使用, 这个时候,应该重新建立一个项目,将原有项目的 ...