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 ";
}


点击一个 '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)
 
 





























































































































































































































原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6200390.html