介绍:

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. 清除NT Kernel & System占用80端口

    运行'netstat -ano'发现80端口被system占用,进程号'4'转到任务管理器上看pid对应的进程描述是NT kernel & system. 解决方法: 1.1运行'regedi ...

  2. svn小技巧——重定向svn diff

    svn diff的默认输出模式比较冗长,如果遇到修改比较多的情况,有时会较难看清diff.svn本身提供了自定义diff输出的选项,可能的修改方法如下: 建立一个脚本文件(如svndiff.sh),调 ...

  3. poj 2299 Ultra-QuickSort(归并排序或是bit 树+离散化皆可)

    题意:给一个数组,计算需要的冒泡排序的次数,元素个数很大,不能用n^2的冒泡排序计算. 解析:这题实际上就是求逆序对的个数,可以用归并排序的方法,我这里用另一种方法写,bit树+离散化.由于元素的值可 ...

  4. ZOJ 1136 Multiple (BFS)

    Multiple Time Limit: 10 Seconds      Memory Limit: 32768 KB a program that, given a natural number N ...

  5. MAC上python环境搭建

    mac自带的有python,如果你需要查看版本,打开terminal输入以下命令: python --version 如果你需要安装新的python版本,有几种方法可以安装,一是去python官网下载 ...

  6. poj 3301 Texas Trip(几何+三分)

    Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in ...

  7. UISearchBar 点击X 按钮收键盘

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;{ NSLog(@"textD ...

  8. IOS 下雪动画

    #define SNOW_IMAGENAME @"snow" #define IMAGE_X arc4random()%(int)Main_Screen_Width #define ...

  9. Objective C - UIColor

    UIColor+Hex.h #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexStrin ...

  10. Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载

    Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载 视频教程目录 Yeslab现任明教教主数据中心第二门课程UCS.1.介绍UCS.rar Yeslab现任明教教主数据中心第二门课程UCS ...