zoukankan      html  css  js  c++  java
  • perl tk说明

    介绍:

    perl/Tk(也被称为pTK) 是一个模块和代码的收集,尝试 简单的配置Tk 8 部件工具包到强大的词素文文字,

    动态内存,I/O, 和面向对象,它是一种解释脚本语言 来制作部件和程序 使用GUI


    Perl 或者 提取和报告语言是有Larry Wall设计, perl的作者,如下:


    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;

    第一行 #!/usr/local/bin/perl 在Windows里是不需要 在Linux 它告诉脚本语言过程的名字


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


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

    对于文本,你使用文本部件 对于entry ,entry 部件如果你需要,你可以看到更多的部件。

    ­text=>"Hello World" 这个选项的部件是说 这个部件必须给定文本 "Hello World"选项
    改变根据部件

    一个按钮部件没有label部件的所有的选项

    请注意  操作用在这里'=>' 相对于早期使用的'->' 在$mw -> 

    一个使用 减号  另外一个使用=号  两者不要混淆。

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

    另外行 类似于Hello World 程序


    在这个例子,更多的选项被使用 font选项告诉font 必须被使用来让text 和relief 选项告诉

    text 是否出现为raised, sunken, flat 等等 对于一个特定的部件,

    阅读手册 它列出了每个部件和每个选项, 如果你想要用Perl编程,


    所有的选项 必须通过逗号分隔,但是你需要指出,这个行是有点难度的  当大量的选项增加时,

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

    接下来是 ->pack();

    这个会pack 部件  '$label' 到windows  '$mw' 


     ’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部件在相同行,但是它是方便与小的程序 ,你可以稍后pack部件 使用部件的变量:

    my $label = $mw -> Label(-text=>"Hello World"); #We created the widget
    $label -> pack(-side=>"left", -anchor=>'w'); #We pack it in another line


    因此 我们有最终的语法 如何创建和显示一个部件:

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

    下面的3行:
    my $button = $mw -> Button(-text => "Quit",
    -command => sub { exit })
    -> pack();

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

    我们会找到两个选项 'text' 和 'command'   给出的text 是Quit

    因此按钮会有一个text "Quit" 在它上面 命令选项确定 上面应该发生 当用户clik 按钮,

    你可以指定一个函数来执行,当用户clicks 一个按钮 在这种情况下


    程序会退出 当这个按钮被执行

    你可以调用函数,你已经创建的。


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

    是主循环或者Event Loop 它的工作是调用callbacks 来响应events

    比如 button 按下或者定时器触发, 如果这行丢失,

    程序会允许,退出 不等待用户做任何事情, 这是另外一种 Tk程序必须的

    Widgets 1 : Button, Entry, Label 按钮,Entry,标签

    一个widget 是一个用户接口对象 在X 图形用户接口?

    我们只是说 它是对象的名字,出现在屏幕上

    这里有很多类型部件 如果你要显示一个按钮, 这里有很多部件类型

    如果你要显示一个按钮,你使用按钮部件

    比如文本框,你使用文本框部件

    输入框, entry 部件

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


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

    首先是 部件变量,

    第一件事是 部件变量  我在之前已经解释了 所有部件的部件变量

    必须是一个唯一的,被使用 当部件需要被2次访问

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

    这通常当部件被定义时就被做了,但是也可以后面做

    最后的事情是命令 每个部件有一些命令,可以用于配置或者让它做一些事情。


    但是在我们开始之前, 我们需要知道一个关于pack命令的东西

    pack 是一个布局管理器另外一个布局管理器是'grid'

    我们后面会解释 pack 是更加简单的相比grid


    Button:

    这个会使一个按钮来执行一些代码,当按钮被执行 这个通常指向一个函数

    因此当按钮被点击后,这个函数会运行一个按钮 这个按钮时创建使用HTML 输入tag:

    一些选项:

    ­text=>"TEXT"                TEXT 会被显示在按钮上

    ­command=>CALLBACK           CALLBACK 当按钮被点击时被调用

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

    你可能已经注意到 我是用了一个 slash()  在这个命令回调

    Entry: 输入框


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

    已经输入 显示一个插入光标来表明 新的字符会被插入

    一个entry 元素 显示如下:

    一些选项:

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

    ­textvariable=>$VARIABLE                 变量 VARIABLE 的内容 会显示在部件,如果text 在部件被编辑,
                                              变量会被自动编辑
            
    ­state=>STATE                             属于域的状态可以是normal,disabled, or readonly
                                               如果 是只读的 text不能被编辑
                
    一些命令:

    语法:                               描述                                      Example

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


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

    entry FIRST 删除一个或者多个元素

    FIRST 是 第一个字符的索引来删除

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

    如果last 没有被指定 默认是FIRST +1,


    ie 是一个单独的字符 被删除 这个命令返回一个空的字符串

    $widget ­> insert(index,"STRING"); 

    插入的字符串在 通过Index 之前的字符  index是0 对于第一个字符 

    end 可以用于最后的字符

    #!/usr/local/bin/perl
    use Tk;
    use strict;
    # Main Window
    my $mw = new MainWindow;
    my $button = $mw-<Button(-text=<"Show Quit Dailog", -command =< &exitTheApp)-<pack();
    sub exitTheApp {
    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

    过程getOpenFile  和getSaveFile 出现一个对话框 让用户选择一个文件打开或者保存


    getOpenFile 命令通常和打开命令在文件菜单里有关系

    它的目的是让用户选择一个存在的文件 ,只有用户输入一个非空的文件,

    对话框 给用户一个错误提示,需要用户用户给出一个可控选择的 如果应用允许用户创建一个文件

    它应该通过提供一个单独的新的menu命令


    getSaveFile 命令通常和Save as 命令联系在一起 在文件菜单

    如果用户输入一个文件 已经存在的, 对话框提示用户确认 当文件存在 是否应该覆盖

    一些选项:

    ­initialdir=>DIRNAME     

    指定目录应该被显示的 当对话框弹出 如果参数没有被指定,

    目录在当前网络 工作目录是被显示 如果参数指定了一个相对路径,返回值转换相对路径为绝对路径


    ­defaultextension=>EXTENSION

    指定一个字符串会被附加到文件名 如果用户属于一个文件没有扩展名

    默认 值是一个空的字符串,意味着没有扩展 会被追加到文件名。

    ­filetypes=>filePatternList

    Toplevel 顶层

    toplevel 是一个部件 可以用于创建一个自定义的对话框

    一个toplevel 类似于一个窗体 除了toplevel是创建为一个top-level 窗体。


    它的X父窗体是屏幕的root windows 相比逻辑父窗体

    主要目的是作为一个容器 用于对话框 和其他部件的容易


    可以使用toplevel 来创建新的窗体 ,一个部件可以布局在topvele里

    Widgets 3 : Radiobutton, Checkbutton


    单选按钮:

    Radiobutton是一个属于 从多个选项中选择其中一个  如果一个选择和另外一个其他的按钮被点击,

    最后的选择会丢失它的状态,被点击的按钮会被选择

    Widgets 4 : Listbox  列表框部件:

    列表框:

    一个列表框 是显示一个字符串的列表,一行一个 ,一个新的列表框没有元素


    元素可以被增加或者删除使用部件命令描述如下:

    部件:  菜单按钮,菜单,选项按钮

    Menubutton  菜单按钮:


    一个菜单按钮是一个部件显示一个文本的字符串,bitmap,或者图片和菜单部件相关的

    一些其他部件 画布,消息,调节器,滚动条

    画布:

    canvas 部件是非常重要的部件, 因为所有的点是在图形绘图区域

    画图部件实现了结构化的图形 ,一个画布显示 任何条目的数量,

    像是长方形 ,圆形,线条,和文本项目


    Message  消息:

    一个消息框 是一个部件显示一个文本字符 很像 label 部件,但是可以用于制造一个多行文本

    合法的选项 指定如何证明文本行必须是left,center或者right  默认是to left

    这个选项和anchor 选项一起工作

    Adjuster  调节器:

    一个调节器 表现为frame 部件  ,一个显著的例外

    便捷可以被拖动和扩展

    这个部件包含任何数目的窗体, 水平或垂直排列,


    Scrolled 滚动条:

    Geometry Management : Grid, Pack  部件管理器 Grid 和Pack


    grid 

    grid 命令是用于个grid布局管理器联系在一起, 部署部件按行和列,

    被称为 部件master(或者master window)

    grid 命令可以有几种构成,依赖选项参数:

    一些选项:

    ­sticky => STYLE

    这个选项可以用于安置(或者拉伸) 部件 在他的单元格里

    包含了0或者多个字符 n,s,e或者w

    每个字母 指向一边(north, south,east, or west) 

    slave会放置 如果n和s 都被指定,slave会延伸来填满整个高度或者宽度

    ­ipadx => AMOUNT

    指定水平内部填充的数量 在slave的每一边, 这个空间是被增加在slave的边界

    指定垂直内部填充的数量 在slave的每一边,类似于ipadx


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

    在屏幕单元 AMOUNT可以是2个值得列表来指定 填充 对于单独的left和right

    ­pady => AMOUNT

    指定多少垂直外部填充 来预留top和bottom

    Some Common Widget Options  一些公用的部件选项:

    大写字母必须被任何粗体的字母替换, 检查手册对于所有的选项

    确保你是用的部件支持你使用的选项:

    ­anchor=>POSITION    安置部件相对的位置:n ne nw s se sw e w 或者center


    ­background=>COLOR    背景色

    ­borderwidth=>WIDTH   边界宽度 选择0 会隐藏边界

    ­command=>SCRIPT  当被调用时 执行脚本

    ­cursor=>CURSOR     鼠标光标显示当鼠标点击这个部件


    disabledforeground=>COLOR       前段颜色 当部件被禁用时

    ­font=>FONTNAME              前段当部件的状态是nornal


    Some Tk Commands  一些Tk命令:

    Bind:

    bind 命令相关的perl代码 ,如果你要做一些事情当用户双击了一个item 在一个列表框或者

    当他按了任何按钮, binds 是你需要让绑定一些在下面的例子:


     

  • 相关阅读:
    约瑟夫问题
    JSON与对象,集合之间的转换
    单向链表
    selenium中的元素操作之三大切换(二)
    接口的鉴权cookie、session和token
    selenium中的元素操作之三大等待(一)
    python中通过selenium简单操作及xpath元素定位&轴定位
    fiddler数据过滤功能
    安装Ubuntu18.04系统
    Ubuntu 18.04 上使用xrdp远程桌面连接(Windows远程桌面连接)
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6200346.html
Copyright © 2011-2022 走看看