• 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)
     
     





























































































































































































































  • 相关阅读:
    Java NIO使用及原理分析(三) 分类: Java 2014-03-12 17:56 447人阅读 评论(0) 收藏
    Java NIO使用及原理分析(二) 分类: Java 2014-03-12 17:55 465人阅读 评论(0) 收藏
    Java NIO使用及原理分析 ( 一 ) 分类: Java 2014-03-12 17:52 637人阅读 评论(0) 收藏
    网络编程中的Socket详解---Socket重要参数详解 分类: Android 2014-03-11 16:25 2066人阅读 评论(0) 收藏
    网络编程中的Socket详解---Socket编程实践详解 分类: Java 2014-03-11 16:19 549人阅读 评论(0) 收藏
    网络编程中的Socket详解---Delayed Ack(Ack确认延迟) && Nagle Algorithm(纳格算法) 分类: Java 2014-03-11 15:46 2316人阅读 评论(0) 收藏
    关于ThreadLocal的一道面试题(酷我公司) 分类: Android 2014-03-04 11:33 2124人阅读 评论(5) 收藏
    Java中的并发库学习总结 分类: Java 2014-03-03 15:12 3115人阅读 评论(3) 收藏
    深入解析Java中volatile关键字的作用 分类: Java 2014-03-03 13:47 1441人阅读 评论(3) 收藏
    Android源码的git下载地址 分类: Android 2014-02-27 15:26 1111人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350994.html
Copyright © 2020-2023  润新知