Chapter 5. Label and Entry Widgets 标签和输入部件
有时候,你需要用户输入特定的信息,比如他们的名字,地址或者 甚至序号。
简单的方式来实现这个是使用Enry 部件,你可以使用一个标签部件 让用户清晰的知道 什么应该被输入在Entry里。
大多数时候,你会看到多次使用标签和Entry 组合
5.1. The Label Widget Label 标签:
一个标签 看起来像一个按钮,但是不做任何事情。
它是一个非交互式的部件,默认 不能有键盘焦点(意思是你不能tab)
它不会做任何,当你点击它的时候
use Tk;
$mw = MainWindow->new( );
$mw->Label(-text => "Label Widget")->pack( );
MainLoop;
不包含 框架部件,Label 是一个最简单的部件。 类似于按钮 可以显示文本(或者图片)
显示多行文本,有不同的字体
图5-2 显示一个简单的窗体, 按钮和标签 如下代码创建:
use Tk;
$mw = MainWindow->new( );
$mw->Label(-text => "Label Widget")->pack( );
$mw->Button(-text => "Exit", -command => sub { exit })->pack( );
MainLoop;
图5-2,一个简单的窗口,标签和按钮:
这里有一个典型的使用对于一个标签:
1.放置一个标签 在Entry 部件的左边,因此用户知道应该输入什么类型的数据:
2. 放置一个标签在一组单点按钮来说明它的目的(比如 后台颜色).
3.使用一个标签 告诉用户 他们做错了什么, 输入的号码是10和100.
典型的,你会使用对话框组合部件给用户消息,但不总是这样
4.放置一个消息行在你的窗口的底部,每个其他的部件需要有一个映射 显示一个字符串 包含信息
5.1.1. Creating a Label 创建一个部件:
这个命令创建一个Label,当然 这是基本的用法:
$label = $parent->Label( [ option => value . . . ] )->pack( );
5.1.3 一个标签不同于其他小部件:
当我们创建 按钮类型部件,我们可以用鼠标点击它们或者使用键盘按下按钮。
一个标签部件,换句话说, 不与用户交互,除非我们添加显示绑定。
对于 -takefocus option 默认值选项是0,也就是说 你不能tab。(切换)
当在部件之间tab,突出的矩形显示哪个部件当前有键盘焦点。
因为我们不允许标签能focus(记住, -takefocus is set to 0),
标签部件不能 有-state 选项, 因为我们不能点击一个标签,我们不应该禁用它
5.1.4. Relief 救援:
5.2. The Entry Widget 输入部件:
知道现在, 我们知道的唯一的输入 是用户的鼠标点击在一个按钮部件上(按钮,多选按钮,单选按钮)
是通过-command 选项处理。
从鼠标点击获取输入是有用的, 但是也有限制。
Enry 部件 让用户输入文本 可以用于任何应用,这里有几个例子,你可以使用Entry 部件:
1.数据库的形式 需要每个域一个entry (例子,Name,Last name,Address)
2.在一个软件登记窗口 需要一个序列号
3.在一个登录窗口 需要用户名和密码
4. 在一个配置窗口 得到printer的名字
5.在一个打开的文件窗口需要文件的名字和路径
Figure 5-5. Entry widget 输入部件:
通常情况下,我们不关心用户输入到一个Entry 部件 知道他们完成打字,
任何处理会发生 "事后" 当用户点击Go按钮做一些排序。
你可以幻想和处理每个字符当它输入通过设置一个复杂的绑定,但是它可能更加麻烦相比它的价值
用户可以输入任何东西到一个Entry 部件,它是有你来决定 输入的文本是否有效,
当准备使用从一个Entry 得到的信息, 我们需要做一些错误检查。
如果我们需要一个整型但是给了一些字母字符,我们需要给出一个警告或者错误信息:
一个Entry 部件是更加复杂的相比 它第一次出现, Entry部件是一个简化的单行文本编辑器。
文本可以被输入,用鼠标选择,删除和增加。
一个Entry 部件是一个中间线的部件, 它是更复杂的相比按钮,
5.2.1. Creating the Entry Widget 创建一个Entry 部件:
这里没有惊喜:
$entry = $parent->Entry( [ option => value . . . ] )->pack;
当Entry 部件被创建, 它最初是空的文本,但是插入的光标(如果Entry 有键盘锁定) 是在最左边:
5.2.3. Assigning the Entry's Contents to a Variable 将Entry的内容 分配给变量:
-textvariable option 让你知道 用户输入的是什么 在Enry 部件:
-textvariable => $variable
现在你应该熟悉这个选项 从我们按钮的几个例子。
任何的文本输入 到Entry 部件会分配到$variable.
相反的也同样适用, 任何字符被分配给$variable 会出现在Entry 部件。
重要的是要记住无论用户输入什么, 它将被分配给这个变量。
这意味着 即使你预计数字输入 你也有可能得到像3s14
如果用户意外的 按下了错误的键。
在使用任何信息从一个Entry 部件, 最好做一些错误检查来确保它的信息是你想要的,
至少,是正确的格式。 使用3s14 会产生你不想要的结果。
另外的方式来找到 在Entry里的内容是使用get方法:
$stuff = $entry->get();
5.2.5. Entry Indexes Entry 条目:
操作文本在Entry 条目,你需要一些方式来定义特定的部分或者在文本内的位置。
最后的例子实际上用于一个Index ,
$e->insert('end', $_) 使用index 'end'.
就像insert 方法( 在本章后面讨论), 所有的方法需要的信息关于一个位置会需要一个index
(或者2个,如果方法需要一个范围的字符)
这个index 可以简单为0,着意味着文本的开始,或者更加负载的,比如'insert';
这里有不同形式的index ,他们所表达的意思:
n(任何整数)
一个数值字符的位置, 0是字符串里的第一个字符,如果Entry 包含的字符串 "My mother hit your mother right on the
nose"
我们使用index 12,字符指向到t
'insert'
这个字符直接跟着 insertion光标, insertion cursor 是有趣的看小酒吧的事情
出现在Entry 部件当文本被编辑,你可以移动它围绕着箭头键或者通过点击不同的位置 在Enry 部件
'end'
字符 只在最后一个在文本串里, 这个值和你指定的整个字符串的长度是一样的
5.2.6. Text Selection Options 文本选择选项:
你可以选择文本在一个Enry 部件,让一些事情发生。 indexes 'sel.first'
和 'sel.last' 指向开始和 选择文本的结束,分别的.
你也可以让选择的文本变量在剪贴板 在Unix 系统通过使用 -exportselection option:
-exportselection => 0 | 1
-exportselection option 选项表明 是否任何选中的文本在一个Entry 会被放入到选择的buffer
除了存储在内部的到Entry 作为选择项。
让这个选项的默认值,你可以粘贴选择的文本到其他应用。
选中的文本也有一些相关的颜色选项 -selectbackground,-selectforeground, and -selectborder
-selectbackground => color
-selectforeground => color
-selectborderwidth => amount