Perl/Tk 也被称为pTk 是一个模块和代码的集合,尝试结合TK8
动态内存 I/O 和面向对象。它是一种解释脚本语言具有用户图形界面
Perl是实录提取和报告语言:
Perl是一个优化的处理文本文件的解释语言,从这个文本中提取信息。基于这些信息产生报告,
用于系统管理任务的语言,
Perl是为了实际容易使用 高效的 完整的 相比魅力 优雅和 mini
perlintro 页的人有对这说明:
Perl 是一种通用编程语言 最初的目的是为操作文本,现在用于更宽的任务
包括系统管理 Web开发 网络编程 和GUI 等等
Tk的扩展使得GUI编程变的可能,从Tcl/Tk Tcl(Tool Command Language)
和Tk,TCL是Windows上的脚本语言.
应用:
在早些日子里,Perl可以编写CGI脚本,现在流行的LAMP组件(Linux / Apache / MySQL / Perl) 平台
为Web开发,Perl被称为胶水语言
Perl 发现许多应用作为胶水语言,结合系统和接口 简短的Perl代码可以运行在一条命令上
哲学
Perl/TkRequirements
在之前的教材中,你肯定有了一些了解,如果有些功能缺失你仍旧可以学习PERL
但是你不能使用它的全部功能
Installing/UsingPerl
HelloWorld
让我们开始,就跟所有教程一样,用了Hello world来创建一个程序
安装Tk模块:
G:运维系统开发20150114>ppm install Tk
Downloading Tk-804.030... 9%
#!/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在Window上是不需要的 在Linux上它高速脚本处理器在我们的例子中就是perl
没有这行Perl不知道是啥意思,不用担心 它只是放在文件的开头
第二行 使用Tk;告诉我们使用Tk模块,这行说明你使用PERL的GUI编程,会加载Tk的组件用于开发
第三行 以#号作为开头的对项目来说没有任何用户,只是注释而已
第4行 my $mw = new MainWindow; 会创建一个窗体用于GUI的元素放置
变量$mw 是'MainWindow' 的一个对象 我们需要使用这个元素 ,当我们在里面放置任何小部件
第5行 my $label = $mw -> Label(-text=>"Hello World") -> pack(); 使用一个标签
写上Hello world,你可以改变文本为任何东西
my $label 这个变量被分配给一个特别的widget(小部件) 必须有一个唯一的变量,这个名字必须被使用
不管这个小部件是否被访问
$mw -> 是主窗体的对象,我们可以把小部件放置我们在窗体了
Label(-text=>"Hello World") lab就是标题名字
Label 是小部件的名字,一个小部件是一个用户的对象在X图形用户接口困惑
我们可以说这个是出现在屏幕上对象的名字,这里有很多其他的小部件
如果你要显示一个按钮,你可以使用按钮部件,
-text=>"Hello World"小部件的选项,这个选项高速我们这个小部件必须是给定的文本Hello World
根据widgets的选项,一个按钮小部件不具有所有的标签部件的选项
注意 操作符=> 相对于之前的-> in $mw
-> 一个使用减号,其他使用= 不要将两者混淆
我们可以创建一个label 来显示Hello World
$mw -> Label(-text=>"Hello World",-font=>"courierfont",-relief=>"raised") ->
pack();
在这个例子中,更多的选项被使用 字体选项被使用 是文本和
-font=>"courierfont" 字体
-relief => flat groove raised ridge sunken
指定组件边框的3-D效果。 flat, 扁平; groove,凹槽;raised,凸起;
ridge,山脊; sunken,下凹的。
所有的选项必须单独按逗号单独分割,这行有点小困难,选项增加了,一个简单的版本是
$mw -> Label(-text=>"Hello World",
-font=>"courierfont",
-relief=>"raised")
-> pack();
-> pack();
这个会把小部件$label布局到窗体上 pack是空间管理器
另外的布局管理器是grid 我更喜欢grid
my $label = $mw -> Label(-text=>"Hello World")
-> 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 因此按钮上会有文本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 是主循环 或者是事件循环,它的工作是调用回调函数来响应事件
比如按了按钮后 或者定时器到期 如果这行丢失
程序会运行然后退出不等待用户做任何事情,MainLoop 是必须做的事情
小部件1: 按钮,,Entry单行文本,标签
一个小部件是用户接口对象在图形用户界面的困惑 它是对象的名字出现在屏幕上,
这里有许多种类型的部件 如果你要去显示一个按钮,你使用的是文本的按钮部件,
你使用文本控件作为入口
So we have the final syntax of how to create and display a widget
my $WidgetVariable = $Window -> WidgetType(Option 1=>Value 1, Option 2=>Value
2 ) -> pack();
三件事情必须说明一下 第一是widget variable 这个我之前已经解释过了
所有的widgets的 widget 变量必须有唯一的名字,当小部件需要被2次访问
每个小部件有自己的一些选项,可以用于配置它
这个通常在小部件变量定义的时候就被done,但是也可以是后来做 最后的事情是commands
每个部件有一些命令也可以配置,让它做一些事情。
在我们开始前,我们需要知道一些 pack命令,之前我已经解释过了
Pack:pack建立一个矩形空间由控件占据,控件间不能重叠覆盖,只能占用剩余空间。因此摆放顺序很重要。缺省放在顶部中间,可用选项改变。
The line $hello >pack; tells the interpreter to pack the widget called "$hello"
因此你没有必要放置back按钮 ,pack是一个空间管理器,另外的空间管理器是grid
我们将探讨Pack是比grid更简单的
Theline$hello->pack;tellstheinterpretertopackthewidgetcalled"$hello"
$hello->pack 这行表示告诉解析器去pack一个部件叫做$hello
按钮:
这个会让一个按钮去执行一些代码,按按了按钮后 通常会指向一个函数(回调函数),
SomeOptions
-text=>"TEXT" TEXTwillbethetextdisplayedonthebutton
-command=>CALLBACK CALLBACKwillbethecodethatiscalledwhenthebuttonispushed
#!/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 "xxxx";
}
函数的引用:
sub printlog {
print "xxxxxxx
";
}
{my $a=&printlog;print "$a
"};
引用通过&函数名实现
Entry单行输入文本
一个entry 部件是显示单行文本字符窜,允许用户输入和编辑文本,当一个entry 被输入
显示一个插入光标,来表明要插入的字符窜
#!/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");
}
-width=>NUMBER 输入域的宽度 必须是整型
-textvariable=>$VARIABLE 变量VARIABLE的内容会被显示在小部件里,
如果小部件的文本被编辑,变量也自动回编辑
-state=>STATE 输入域的状态 可以是nornal disables 和readonly 如果是只读那么文本不能被编辑
SomeCommands
$widget ->get(); 文本框输入的内容可以通过这个方法取得
例子:$name = $ent ->get();
$widget -> insert(index,"STRING");
Label
这个部件显示文本信息:
-text=>"TEXT"
(-text=>"Hello World") text会显示为Hello World
指定的字体是绘制字体时使用在部件内,你可以仅指定字体
部件2:
Frame放置其他控件的地方 ,文本,Scrollbar滚动条,Scale滑动块
框架:
一个框架是一个简单的部件它的主要目的是为复杂的窗口布局作为间隔或者容器。
框架的唯一特点是其背景颜色,
my $frm = $mw -> Frame();
在框架内放置其他的部件,你可以使用框架部件变量作为parent 通常parent 是$mv 或者是主窗口
但是如果我们希望在框架内放置一个部件,使用frame变量 $frm 代替$mv
Text 文本:
文本部件显示一行或者多行文本,允许编辑文本框类似于更大号的entry 部件
-xscrollcommand=>COMMAND 水平滚动条
这个是联系文本框部件和滚动条部件,
这个类似于yscrollcommand
Some Options
xscrollcommand
=> COMMAND This is to enable communication between a text widget and a scroll bar widget
There is a yscrollcommand
similler to this one
font=> FONTNAME Specifies the font to use when drawing text inside the widget
width=> NUMBER Specifies the width of the widget
height=> NUMBER Specifies the, you guessed it, height of the widget;
$widget ->get(index1, index2 );
从文本框返回字符窜的范围,返回的值是所有的字符窜在文本框里,
从index1开始到Index2结束 (index2的字符窜不会返回) 如果Index2被忽略,那么只会返回index1得值
$contents = $txt >get(10,'end');
$widget ->insert(index,DATA);
插入的所有字符参数在字符索引之前,如果index 指向文本框的最后
那么新的文本会在上次插后之后
例子$txt ->inset('end',"Hello World");
滚动条:
滚动条是一个小部件,用于显示双箭头,在滚动条的两端,在中间部分是滑动条,
它提供了关于在相关窗口显示的一部分文档的可视信息 排序(如正在编辑的文件或图形)
他位置和滑块的大小表明的那部分文件是相关的窗口可见
orient=>DIRECTION
控件,可以把自己与一个水平
活垂直的方向 如滚动条,此选项用于指定DIRECTION应使用的方向,
必须是水平或者垂直
command=> COMMAND
这个命令被执行时,移动滚动条时这个选项总是有一个值 比如 t xview or t yview
组成了部件的名字 不管是xview(水平滚动条)或者是yview(垂直滚动条)
所有的滚动必须有 xview and yview commands
grid 布局:
我在这里使用了 grid, grid 是类似pack 布局管理器但是grid 更先进
我们进一步看下这个命令
$widget -> grid(-row=>1, -column=>1);
这行告诉解释器放置$txt的小部件 在第一列第一行在它的父控件下
下面的图会帮助你理解:
Column1 Column2
Row1 '$txt'widgetwillbehere '$srl_y'widget'splace
Row2 '$srl_x'widget'sposition
----------------------------------------------------------------------------
#!/usr/local/bin/perl
use Tk;
my $mw = new MainWindow; # Main Window
my $frm_name = $mw -> Frame();
my $lab = $frm_name -> Label(-text=>"Name:");
my $ent = $frm_name -> Entry();
my $but = $mw -> Button(-text=>"Push Me", -command =>&push_button);
my $textarea = $mw -> Frame(); #Creating Another Frame
my $txt = $textarea -> Text(-width=>40, -height=>10);
my $srl_y = $textarea -> Scrollbar(-orient=>'v',-command=>[yview => $txt]);
my $srl_x = $textarea -> Scrollbar(-orient=>'h',-command=>[xview => $txt]);
$txt -> configure(-yscrollcommand=>['set', $srl_y],
-xscrollcommand=>['set',$srl_x]);
$lab -> grid(-row=>1,-column=>1);
$ent -> grid(-row=>1,-column=>2);
$frm_name -> grid(-row=>1,-column=>1,-columnspan=>2);
$but -> grid(-row=>4,-column=>1,-columnspan=>2);
$txt -> grid(-row=>1,-column=>1);
$srl_y -> grid(-row=>1,-column=>2,-sticky=>"ns");
$srl_x -> grid(-row=>2,-column=>1,-sticky=>"ew");
$textarea -> grid(-row=>5,-column=>1,-columnspan=>2);
MainLoop;
#This function will be executed when the button is pushed
sub push_button {
my $name = $ent -> get();
$txt -> insert('end',"Hello, $name");
}
------------------------------------------------------------------------------
一些选项:
-sticky=>STYLE
这个选项被用于放置(或者拉伸)部件内的cell STYLE ,
cell STYLE 是一个字符窜包含0个或多多个字符窜 n,s,e 或者w
每个字母指向一个方向(北,南,东,西)
slave 会产生作用如果ns 和 ew 都被指定,将全满整个高度或者宽度。
-sticky=>"ew" 东西填满
-sticky=>"ns" 南北填满
-ipadx => AMOUNT
AMOUNT 指定了水平内部填充预留给每个salve增加空间的量
-ipady => AMOUNT
指定从垂直内部填充留给每个salve的数量
-padx=>AMOUNT指定水平外部填充预留给每个slave的数量,
在屏幕单位量数量可能是一个两个值得列表来填充左右两端
-pady=>AMOUNT指定垂直外部填充预留给每个salve的数量
-row=>N 插入slave 用于占据以0开始的N行
如果这个选项不支持,那么子控件会被安排到同样的行,和先前的指定的slave
-column=>N 插入子控件, 占据grid的第N行
-rowspan=>N 插入子控件,grid 默认占据一行指定的话表示占据N行
columnspan=>N 插入slave 占据grid的N列
Scale滑动块
通过用户输入的变量来调整slider
一些选项:
-from=>NUMBER 开始的数字
-to=>NUMBER 结束的数字
-tickinterval=>NUMBER 刻度间隔
决定数字刻度
-varable=>NAME:
指定联系到scale的全局变量,当变量的值改变时,scale会升级去影响相互操作的scale
$widget->get();
Get the current value of the scale my $age=$scl->get();
$widget->set(value); Give the scale a new value $scl->set(20);
-------------------------------------------------------------------------------------------
#!/usr/local/bin/perl
use Tk;
#Global Variables
my $age = 10;
# Main Window
my $mw = new MainWindow;
#GUI Building Area
my $frm_name = $mw -> Frame();
my $lab = $frm_name -> Label(-text=>"Name:");
my $ent = $frm_name -> Entry();
#Age
my $scl = $mw -> Scale(-label=>"Age :",
-orient=>'v', -digit=>1,
-from=>10, -to=>50,
-variable=>$age, -tickinterval=>20);
my $but = $mw -> Button(-text=>"Push Me", -command =>&push_button);
#Text Area
my $textarea = $mw -> Frame();
my $txt = $textarea -> Text(-width=>40, -height=>10);
my $srl_y = $textarea -> Scrollbar(-orient=>'v',-command=>[yview => $txt]);
my $srl_x = $textarea -> Scrollbar(-orient=>'h',-command=>[xview => $txt]);
$txt -> configure(-yscrollcommand=>['set', $srl_y],
-xscrollcommand=>['set',$srl_x]);
#Geometry Management
$lab -> grid(-row=>1,-column=>1);
$ent -> grid(-row=>1,-column=>2);
$scl -> grid(-row=>2,-column=>1);
$frm_name -> grid(-row=>1,-column=>1,-columnspan=>2);
$but -> grid(-row=>4,-column=>1,-columnspan=>2);
$txt -> grid(-row=>1,-column=>1);
$srl_y -> grid(-row=>1,-column=>2,-sticky=>"ns");
$srl_x -> grid(-row=>2,-column=>1,-sticky=>"ew");
$textarea -> grid(-row=>5,-column=>1,-columnspan=>2);
MainLoop;
## Functions
#This function will be exected when the button is pushed
sub push_button {
my $name = $ent -> get();
$txt -> insert('end',"$name is $age years old");
}
-----------------------------------------------------------------------------------------
-orient=>'v' 控件 滚动条方向 垂直
-orient=>'h' 水平
Dialogs 对话框
对话框可以被称为程序里的一个元素,从主窗口分开,这是一个非常普通的定义,Tk提供了很多诊断对话框
messageBox 消息框
这个程序创建和显示一个应用指定的消息窗口,一个图标和一些按钮,每个按钮在消息框里事被定义
一个唯一的符号名字。
消息框弹出后,消息框等待用户来选择按其中的按钮
一些选项:
-default=>name 消息窗口默认按钮的符号名字('ok','cancel',
andsoon),如果符号名字没有被指定,那么对话框里的第一个按钮就是默认的
-icon>iconImage 指定一个图标显示IconImage 必须是下面中的一个:
error,info,question 或者warning 如果这个选项没有指定,那么就会显示为info 按钮
--显示弹出窗口的类型
-message>string 消息框里的信息
-title>String 指定消息框的标题,默认是空字符窜
-type>predefinedType 为预定义类型的按钮安排来显示以下可能的值:
abortretryignore Displays threebuttonswhosesymbolicnamesareabort,retryandignore
ok Displaysonebuttonwhosesymbolicnameisok
okcancel Displaystwobuttonswhosesymbolicnamesareokandcancel
retrycancel Displaystwobuttonswhosesymbolicnamesareretryandcancel
yesno Displaystwobuttonswhosesymbolicnamesareyesandno
yesnocancel Displaysthreebuttonswhosesymbolicnamesareyes,noandcancel
对话框颜色:
initialcolor ->COLOUR 显示弹出对话框的颜色
#!/usr/local/bin/perl
use Tk;
use strict;
# Main Window
my $mw = new MainWindow;
####定义一个按钮,文本框内容为"Show Quit Dailog" 执行的命令为&exitTheApp
my $button = $mw->Button(-text=>"Show Quit Dailog", -command =>&exitTheApp)->pack();
sub exitTheApp {
##-message=> 消息里的对话框信息为Really quit -type类型为yesno
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
函数getOpenFileandgetSaveFile Pop up了一个对话框让用户选择文件打开或者保存文件
getOpenFile 命令通常和文件菜单中打开命令相关 目的是让用户选择一个存在的文件,只有当键入了一个不存在的文件
对话框给用户一个错误提示,需要用户给出一个替代的选择,如果应用允许用户创建新的文件,
通过一个单独的新的菜单来实现
getSaveFile 函数和文件保存命令相结合,如果用户键入一个已经存在的文件,对话框提示用户确认文件是能被覆盖
选项:
-initialdir=>DIRNAME 初始路径
指定目录中显示的目录数,当对话框弹出时,如果参数没有被指定,工作目录下的所有目录会被显示
ruguo参数指定了一个相对的目录,返回的值会转换为相对路径为绝对路径
defaultextension=>EXTENSION 默认的扩展名
指定一个字符窜用于附加到文件名,如果用户输入了一个没有扩展名的文件名 默认值是空的字符窜,
意味着没有扩展名会被追加到文件
-filetypes=>filePatternLis 文件类型
如果一个文件类型是列表存在文件对话框里在一个特定的平台,
这个选项使文件列表里的文件类型 当用户选择一个在文件列表里的文件类型,
如果这个选项没有指定 那么只有指定类型的文件会显示或者是空列表
或者是特定的平台不支持这种文件类型,然后会列出所有类型的文件
-initialfile=>FILENAME 指定弹出对话框的名字
-multiple 允许用户从对话框中选择多个文件
Toplevel 顶层
Toplevel 顶层小部件是用于创建自定义的对话框,一个Toplevel类似一个frame
除了Toplevel被创建成top-level window:
它的X parent 是屏幕的根窗口,相比逻辑parent从它的路径名字。
toplevel的主要目的是作为一个容器服务 对话框,其它的部件的集合唯一的特征是
你可以使用toplevel 来创建新的窗体
#!/usr/local/bin/perl
use Tk;
# Main Window
$mw = new MainWindow;
my $lab = $mw -> Label(-text=>"This is the root window",-font=>"ansi 12 bold") -> pack;
my $but = $mw -> Button(-text=>"Click to Create Toplevel",-command=>&makeTop) -> pack;
MainLoop;
#A function to make a toplevel window
sub makeTop {
my $top = $mw -> Toplevel(); #Make the window
#Put things in it
my $top_lab = $top -> Label(-text=>"This is the Toplevel window",
-font=>"ansi 12 bold") -> pack;
my $txt = $top -> Text() -> pack;
$txt -> insert('end', "Widgets can be packed in this window");
#An option to close the window
my $but_close = $top -> Button(-text=>"Close",
-command => sub { destroy $top; } ) -> pack;
}
部件3 单选按钮和核查按钮
Radiobutton 是从多个选项中选择一个的按钮,选择另一个按钮点击,按钮的点击就是选择
Choices1|2|3
-command=>COMMAND 指定一个和按钮相关的命令。
-variable=>$VARIABLE 指定全局变量的名字用于表明 按钮是否被选择
-value=>VALUE 按钮相关变量的值,当按钮被选择时
Checkbutton 核查按钮: 是一个两个选项的按钮 off or on
通过按钮改变
-offvalue=>VALUE 指定存在在按钮里的值相关的变量 当按钮取消后 默认值是``0''
-onvalue=>VALUE 指定存在在按钮里的值相关的变量 当按钮选择后 默认是``1''
-command=>CALLBACK 指定按钮相关的命令
Widgets4:Listbox 列表框
一个列表框是用于展示字符窜列表的部件,一行一条记录,一个新的列表框是没有元素的
元素的增加和删除通过widget命令
-selectmode=>MODE
指定几个样式中的一个用于操作,选择的模式可能是任意的,但是默认绑期望是单个,浏览,多个或者宽展
默认模式是browse
$widget->curselection(); 例子 $sel=$lst->curselection();
返回一个列表包含列表框里所有元素的数值指标
$widget->delete(first,last) 例子 $lst->delete(5);
删除一个或者列表的元素,指定第一个和最后一个元素,第一个和最后一个元素范围内被删除
如果最后一个没有被指定,默认就是first,那么会删除单个元素
$widget->get(first,last); 例子 $lst->get(5,end);
如果最后的忽略,返回列表元素的内容值表示的是第一个值
如果第一个指向一个不存在的元素,最后一个指定了 那么返回的是一个空的字符窜
$widget->index(index); 返回的是相应的索引的索引值
如果索引是最后一个值 那么返回的是列表元素的个数。
Widgets5:Menubutton,Menu,Optionmenu
菜单按钮,菜单,选项按钮
菜单按钮: 菜单按钮式用户显示文本字符窜,位图或者图片,用于显示下拉菜单。
direction => DIRECTION:
指定餐单弹出的方向
菜单:
一个菜单是一个显示一个一行一行的条目的集合,不同属性的菜单条条目包含在一个菜单中,
菜单条目不同于 entry 部件,菜单条目不是一个单独的部件,整个菜单菜式一个部件
-tearoff=>BOOLEAN 这个选项必须有一个合适的布尔值,指定了菜单是否在顶端包含虚线的entry
它会以entry 0 存在于菜单,其他的entries 会以1开始
设置entry 顶端会包含虚线
-title=>STRING
字符窜被用于标题窗口创建,当菜单被分离 如果标题是空的,
那么窗口可以有菜单按钮的标题
-type=>OPTION
添加一个entry 在菜单的底部,新的entry的类型有type决定,
必须是cascade,checkbutton,command,radiobutton其中一个,或者是单独的或者唯一的
缩写
-accelerator=>VALUE 加速器
指定一个字符窜显示菜单条目右边
通常描述一个加速键序号,调用相当的函数和菜单条目一样 这个选择不能用于分离器和分离的条目
选项菜单:
创建一个按钮,执行按钮后会显示一系列的选项,用户从其中选择一项
选项按钮:
更多的部件 画图 消息 调节器 滑动条
画图:
画图是一个非常重要的部件,寻址所有的点,通过画图部件实现结构化图形
一个部件显示任何数目的项目, 这可能是矩形,圆,直线和文本项目
通过命令$widget -> create 类型选项用于创建不同的结构
消息部件:
一个消息部件用于显示一个文本的字符窜和标签部件很像,但是这个可以用多行文本
调节器:
调节器像frame 部件,一个显著的不同是边界可以被拖动和延伸
这个部件包含任何数量的窗,水平或者垂直部署,
滑动条
Scrolled是一个派生的部件,创建一个附属于滚动条的部件
布局管理器: grid 和pack
grid 命令是用于联系grid 部件管理器的,用于部署按行列方式部署部件.
换句话说,grid是放置你的部件的东西
Pack 布局:
Pack 也是一个布局管理器,但是相对简单没有使用行列来显示,
pack试用于懒汉 只需要需要 $widget -> pack 部件就会被部署
但是更负载的部署就需要frames
-expand=>BOOLEAN
指定子部件可以扩展消耗master的额外的空间,
听起来像子部件正在吃掉master的控件
意思就是说 当应用尺寸大小改变时,部件自动填充空间。
-fill=>STYLE 这个会让部件在水平方向,垂直方向和两个方向延伸
-side=>SIDE 指定master哪边,子部件被部署必须是左,右,上面 底部 默认是上面
一些通用的部件选项:
大写字母必须被加粗的单位代替
-anchor=>POSITION Position widget relative to:n ne nw s se sw e w or center
部件的相对位置 n ne nw s s esw ew or center
-background=>COLOR Backgroundcolor 背景色
-borderwidth=>WIDTH 边境的宽度选择 0 会隐藏边境
-command=>SCRIPT 调用脚本
-cursor=>CURSOR 显示光标
disabledforeground=>COLOR 背景色 当部件变为不可用
-height=>VALUE Setverticalheightofthewidget
设置部件的垂直高度
-image=>IMAGE The image to display in widget
orient=>ORIENTATION scale和滚动条必须是水平或者垂直
justify=>JUSTIFICATIO 多行对齐
-padx=>NUMBER 水平填充
-pady=>NUMBER 垂直填充
-relief=>RELIEF
-state=>STATE Setwidgetto:normal,disabledoractive
-text=>STRING Displaytextstring 显示字符窜
一些Tk命令:
Bind
bind命令相关的Perl代码,当用户双击一个项目在一个列表框里
或者按下F1键,bind是绑定你需要的东西
危险海域已经渡过,想着灼热的沙漠,来到这里我们客服了无数的危险,我们已经来到了终点,现在也该结束路程了。
TkX 介绍:
widget 小部件,相当于控件,组件,有自己的属性和方法。
基本编程结构:
1。创建主窗体 主窗体是可用作顶级的控件。
2。加入小控件。
3。启动事件循环。
全部是文本输入,没有图形化界面或自动生成程序。
Geometry管理器,布局管理。有placer,pack,grid三种。Grid最常用。
事件绑定:回调函数和事件类型关联,有command,bind两种方式。
控件:
点击按钮 调用回调函数
MainWindow主窗口,Menu菜单,Entry单行文本,Frame放置其他控件的地方,Text多行文本,Canvas画布。Label标签,Button按钮,Radiobutton单选框,Checkbutton复选框,ListBox列表框,combobox组合框,Scrollbar滚动条,Scale滑动块,Progressbar进度条,spinbox,separator分割条,labeled frame分组框,panedwindow面板窗口,notebook笔记本(tab),HList结构列表,
scrollbars => SIDE
Expects as argument the position where the scrollbars should be created: w, e or n, s or a
combination of them If the one or both positions are prefixed with o the scrollbar will only show
up if there is a 'real' need to scroll
期待一个参数 定义创建滚动条的位置,w e n s 或者是它们的组合,如果有o的选项那么滚动条,只有当需要滚动的时候
才出现。