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;





第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' 是部件的名字,一个部件是一个用户接口对象在图形用户接口





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





你使用button 部件  对于text 你使用text 部件





­text=>"Hello World" 这个选项对于部件 这个选项 says  这个部件必须给定一个文件 "Hello

World" 选项 根据部件 一个按钮部件 没有必要有所有的label部件选项 





请注意 操作符用于这里是 '=>' 相对于之前使用-> 在 $mw ->





一个使用减号 当另外一个使用=号 ,不要混淆这个两个。





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

”Hello World"  





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

pack();









在这个例子, 更多的选项被使用 前面的选项是用于哪个front 必须被使用让文本和





告诉是否应该出现raised,sunken,flat etc 对于一个特定的部件,





阅读手册 Perl让每个部件和每个选项









所有的选项必须单独的通过逗号分隔,这行是有一点难阅读的 随着选项的增加





$mw -> Label(-text=>"Hello World",

-font=>"courierfont",

-relief=>"raised")

-> pack();





下一个是-> pack();  这个会Pack 部件  '$label'  到windows '$mv' '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部件放在相同的行, 但是在小的程序是方便的。





my $label = $mw -> Label(-text=>"Hello World"); #We created the widget

$label -> pack(-side=>"left", -anchor=>'w'); #We pack it in another line





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





我们会发现2个选项 'text' 和'command' 





给定的文本是Quit





因此按钮会有text "Quit" ,命令选项 决定 会发生什么 当用户点击按钮





你可以指定一个函数来执行当用户点击按钮,在这种情况下 程序会退出 当这个按钮被执行





#!/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 是Main Loop 或者事件循环 让job 来借助回调来响应事件。









比如按钮按下 或者定时器到期 如果 这行丢失, 程序会运行和退出不等待用户做任何事情





Widgets 1 : Button, Entry, Label   部件 1:按钮,输入框,标签





一个部件是一个用户接口对象在X图形用户接口, 让我们只是说对象的名字出现在屏幕





这里有很多类型部件,你需要显示在一个按钮,你使用按钮部件 





对于文本, 你使用文本部件 用于输入









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





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





第一是部件变量 这个我已经在之前解释过了 





所有部件的部件变量必须唯一,会用于当部件需要2次访问的时候





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





这个通常在部件被定义时候处理,但是它也能在后面处理 









最后的事情是每个部件有一些命令, 也用来配置或者做一些事情。





但是在我们开始前,我们需要知道一点关于pack命令我已经之前解释了





但是多做几次你不需要push back 按钮Pack 是一个布局管理器另外一个部件管理器是grid





我们后面会介绍 Pack相比grid是更加简单的 





 $hello ­> pack,告诉 解释器来pack部件叫做$hello ­





按钮:





这会让一个按钮配置执行一些代码, 当button 被按后 这个会指向一个函数





因此当按钮被按后,函数会运行一个按钮显示如下 按钮时创建使用HTML 输入tag





Some Options

­text=>"TEXT" TEXT will be the text displayed on the button

­command=>CALLBACK CALLBACK will be the code that is called when the button is pushed





#!/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 {

print "xxxxxxxxxx\n";

}





点击一个 'Push Me'按钮,就会输出一次。





你可能注意到 我使用了\ 在命令回调函数 (-command =>\&push_button);)





Entry  输入框





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





当一个entry 已经输入,插入的游标表明 新的字符可以被插入到一个空的元素 





一些选项:

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





­textvariable=>\$VARIABLE   变量的内容会显示在部件里,如果text 在部件里被编辑,





变量会被自动编辑





­state=>STATE   输入域的状态可以是 normal, disabled, or readonly 如果它是只读的,text不能被编辑





一些命令:

语法                        描述                                 例子

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





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





 删除一个或者多个entry的元素  FIRST 是第一个字符index 来删除

 

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

 

 #!/usr/local/bin/perl

use Tk;

# Main Window

my $mw = new MainWindow;

#GUI Building Area

my $ent = $mw -> Entry() -> pack();

my $but = $mw -> Button(-text => "Push Me",

-command =>\&push_button);

$but -> pack();

MainLoop;

#This is executed when the button is pressed

sub push_button {

$ent -> insert('end',"Hello");

}





在尾部插入 Hello 





Label  标签:





这个部件显示文本信息:





一些选项:





­text => "TEXT"       TEXT will be the text displayed on the button





                      TEXT 将会是text显示在按钮上

 

 

­font => FONT





指定字体 来使用 当绘制文本在部件内,你可以指定font 或者事件循环

你可以指定它格式  "FONTNAME SIZE STYLE" 





Widgets 2 : Frame, Text, Scrollbar, Scale   窗体,文本,滚动表, 刻度尺





Frame 窗体:





一个框架是一个简单的部件它的主要目的是作为一个间隔装置 或者 容器 





对于复杂的windows 布局   frame唯一的功能是它的背景颜色和一个可选的3-D





边界 来让frame 出现 raised or sunken





Frame 可以被创建像任何其他的部件一样:

#!/usr/local/bin/perl

use Tk;

my $mw = new MainWindow; # Main Window

my $frm = $mw -> Frame();

MainLoop;





为了放置其他的部件在窗体里,你应该使用frame 部件变量作为它的parent









通常 parent 是'$mw' 或者 MainWindow





但是我们希望放置一个部件在窗体内, 使用frame 变量 ('$frm' in this case) in

place of '$mw' Like this





my $lab = $frm_name -> Label(-text=>"Name:") -> pack();









Text

一个文本部件显示一行或者多行文本,允许文本被编辑类似于entry部件 





$widget ­> get(index1, ?index2 ?);













返回一个字符串从文本, 返回的值会是所有的字符串在text里 从index=index1开始和index=index2结束





(字符集在index2不会被返回)





如果index2 被省略 那么单个字符在Index1 被返回。





注意text的index 不同于 entry部件  









Scrollbar  滚动条





一个滚动条部件是一个部件显示2个箭头, 在滚动条两端,在中间的部分是一个滑动块





它提供的信息是关于 可见的在一个相关的框框  显示一些排序的内容









­ipadx => AMOUNT





指定水平内部填充 留下在slaves两边的数量,这个空间是被增加到slave的边境













­ipady => AMOUNT  指定垂直的内部填充留给slave两端的 









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









在屏幕单元 AMOUNT 可能是两个值的列表来指定填充单独额left或者right





­pady => AMOUNT  指定崔志外部填充留给slave顶和底部的数量





­row => N  插入slave 让它占据第N行 在grid 行号从0开始 









如果这个选项没有指定, slave会被安排在相同的行和先前的slave 被指定在这个请求给grid









­column => N





插入到 slave让它占据N列在grid选项 和-row类型





­rowspan => N





插入slave 让它占据N行 在grid里 默认是一行









­columnspan => N





插入slave 让它占据N列 在grid里





使用grid 需要一些经验,但是你知道HTML 它会帮助你很多 





行和列就像HTML的表格,尽管代码不同













Scale 刻度尺:









Dialogs: 对话框





对话框可以被称为元素在一个程序里,分离它本身从main windows 





这是一个非常一般的定义和有很多问题但是此刻,它将为Tk提供很多的对话框:





messageBox: 消息框





这个程序创建和显示一个应用指定的消息窗口,一个按钮和一组按钮 每个按钮在消息框是用一个唯一的





象征性符号表示(查看 类型选项)





在消息窗口出现后,messageBox 等待用户来选择一个





 

 一些选项:

 

 ­default=>name         

 

 

 默认按钮的符号名字对于这个消息框框(ok', 'cancel',and so on)

tk资料的更多相关文章

  1. 简单说说Tk和Tcl

    开园第一个博客,简单说说Tk和Tcl. 我接触Tk和Tcl是在学习Python Tkinter时候,创建Tk对象,下面言归正传: Tcl:工具命令语言,英文全称为Tool Command Langua ...

  2. oracle 方向及资料

    总结了一下大家的意见,也加了一些个人的看法,Oracle的学习路径,可供参考: 初级阶段: 可以从OCP教材开始,还有文档中的Administrator's Guide.Concepts.Perfor ...

  3. 转发 PHP 资料(一)

    WebShell隐藏思路.webshell磁盘读写动态检测.webshell沙箱动态检测(2)   作为WebShell检测.CMS修复.WebShell攻防研究学习的第二篇文章 本文旨在研究Webs ...

  4. 【持续更新】D3 的学习资料

    经常有朋友问哪里有关于 D3 的比较好的学习资料,现整理成此文.以后找到更多更好的,会不断更新本文. 我是在2013年开始接触 D3 的,当时就觉得这个工具很好玩.至今,学习资料整理了不少.如果有朋友 ...

  5. Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider

    相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...

  6. Python的GUI编程(TK)

    TK在大多数 Unix平台.Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口.可实现Python的GUI编程. Tkinter模 ...

  7. Vim新手入门资料和一些Vim实用小技巧

    一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...

  8. Git入门资料汇总

    Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...

  9. MVC5 网站开发之七 用户功能 3用户资料的修改和删除

    这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...

随机推荐

  1. Visual studio 使用正则表达查找替换

    原文 http://www.cnblogs.com/shineqiujuan/archive/2012/07/04/2575535.html 正则表达式是查找和替换文本模式的一种简洁而灵活的表示法.  ...

  2. GET: https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login? loginicon=true &uuid=odcptUu2JA==&tip=0

    GET: https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login? loginicon=true &uuid=odcptUu2JA==&am ...

  3. JQuery 补充

    筛选: expr         String 字符串值,包含供匹配当前元素集合的选择器表达式. jQuery      objectobject 现有的jQuery对象,以匹配当前的元素. elem ...

  4. 设计模式13---设计模式之观察者模式(Observer)(行为型)

    1.场景模式抽象 订阅报纸的过程,如果报纸来了的时间不确定,那么订报纸的人如何知道呢?可以抽象为:当一个对象的状态发生改变的时候,如何让依赖他的所有对象得到通知,并进行相应的处理呢?生活中最常见的例子 ...

  5. 我为什么放弃Go语言

    有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?事实上我一直在认真思考这个问题. 开门见山地说,我当初放弃Go语言(golang),就是由于两个 ...

  6. servlet基本概念

    一.servlet是一个供其它java程序调用的java类,比方tomcatserver,它不能独自执行,它的执行由servlet引擎来控制和调度. 二.servlet是单例,多线程 针对多个clie ...

  7. hdu1171 Big Event in HDU 01-背包

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 Problem ...

  8. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  9. html_day4+css

    表单控件共有的属性: enabled:表示表单控件可用 disabled:表示表单控件被禁用 readonly:表示表单控件只能读name属性值的作用: 需要将表单的数据提交到服务器处理就要写name ...

  10. MySql命令——命令行客户机的分隔符

    delimiter // create procedure productpricint() begin select avg(price) as priceaverage from product; ...