tk资料
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资料的更多相关文章
- 简单说说Tk和Tcl
开园第一个博客,简单说说Tk和Tcl. 我接触Tk和Tcl是在学习Python Tkinter时候,创建Tk对象,下面言归正传: Tcl:工具命令语言,英文全称为Tool Command Langua ...
- oracle 方向及资料
总结了一下大家的意见,也加了一些个人的看法,Oracle的学习路径,可供参考: 初级阶段: 可以从OCP教材开始,还有文档中的Administrator's Guide.Concepts.Perfor ...
- 转发 PHP 资料(一)
WebShell隐藏思路.webshell磁盘读写动态检测.webshell沙箱动态检测(2) 作为WebShell检测.CMS修复.WebShell攻防研究学习的第二篇文章 本文旨在研究Webs ...
- 【持续更新】D3 的学习资料
经常有朋友问哪里有关于 D3 的比较好的学习资料,现整理成此文.以后找到更多更好的,会不断更新本文. 我是在2013年开始接触 D3 的,当时就觉得这个工具很好玩.至今,学习资料整理了不少.如果有朋友 ...
- Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider
相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...
- Python的GUI编程(TK)
TK在大多数 Unix平台.Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口.可实现Python的GUI编程. Tkinter模 ...
- Vim新手入门资料和一些Vim实用小技巧
一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...
- Git入门资料汇总
Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...
- MVC5 网站开发之七 用户功能 3用户资料的修改和删除
这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...
随机推荐
- Visual studio 使用正则表达查找替换
原文 http://www.cnblogs.com/shineqiujuan/archive/2012/07/04/2575535.html 正则表达式是查找和替换文本模式的一种简洁而灵活的表示法. ...
- 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 ...
- JQuery 补充
筛选: expr String 字符串值,包含供匹配当前元素集合的选择器表达式. jQuery objectobject 现有的jQuery对象,以匹配当前的元素. elem ...
- 设计模式13---设计模式之观察者模式(Observer)(行为型)
1.场景模式抽象 订阅报纸的过程,如果报纸来了的时间不确定,那么订报纸的人如何知道呢?可以抽象为:当一个对象的状态发生改变的时候,如何让依赖他的所有对象得到通知,并进行相应的处理呢?生活中最常见的例子 ...
- 我为什么放弃Go语言
有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?事实上我一直在认真思考这个问题. 开门见山地说,我当初放弃Go语言(golang),就是由于两个 ...
- servlet基本概念
一.servlet是一个供其它java程序调用的java类,比方tomcatserver,它不能独自执行,它的执行由servlet引擎来控制和调度. 二.servlet是单例,多线程 针对多个clie ...
- hdu1171 Big Event in HDU 01-背包
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 Problem ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- html_day4+css
表单控件共有的属性: enabled:表示表单控件可用 disabled:表示表单控件被禁用 readonly:表示表单控件只能读name属性值的作用: 需要将表单的数据提交到服务器处理就要写name ...
- MySql命令——命令行客户机的分隔符
delimiter // create procedure productpricint() begin select avg(price) as priceaverage from product; ...