- Ruby 基础
- Ruby - 首页
- Ruby - 概览
- Ruby - 环境搭建
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 代码块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希表
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 异常
Ruby/TK - 输入框控件
描述
一个输入框为用户提供了一个单行文本字段,用户可以在其中输入值。这些值可以是任何东西:姓名、城市、密码、社会安全号码等等。
语法
以下是一个创建此控件的简单语法:
TkEntry.new { .....Standard Options.... .....Widget-specific Options.... }
标准选项
- 背景颜色 (background)
- 边框宽度 (borderwidth)
- 光标 (cursor)
- 是否导出选择内容 (exportselection)
- 字体 (font)
- 前景色 (foreground)
- 高亮背景色 (highlightbackground)
- 高亮颜色 (highlightcolor)
- 高亮厚度 (highlightthickness)
- 文本对齐方式 (justify)
- 浮雕样式 (relief)
- 选中背景色 (selectbackground)
- 选中边框宽度 (selectborderwidth)
- 选中前景色 (selectforeground)
- 是否获取焦点 (takefocus)
- 文本变量 (textvariable)
- 水平滚动命令 (xscrollcommand)
这些选项已在上章中进行了描述。
控件特定选项
序号 | 选项及描述 |
---|---|
1 | disabledbackground => 字符串 指定输入框禁用时的背景颜色。如果此选项为空字符串,则使用正常的背景颜色。 |
2 | disabledforeground => 字符串 指定输入框禁用时的前景色。如果此选项为空字符串,则使用正常的颜色。 |
3 | readonlybackground => 字符串 指定输入框为只读时的背景颜色。如果此选项为空字符串,则使用正常的背景颜色。 |
4 | show => 字符串 如果指定此选项,则窗口中不会显示输入框的真实内容。相反,输入框值中的每个字符都将显示为此选项值中的第一个字符,例如“*”。例如,如果输入框用于输入密码,则此选项很有用。如果选择输入框中的字符并将其复制到其他位置,则复制的信息将是显示的内容,而不是输入框的真实内容。 |
5 | state => 字符串 指定输入框的三种状态之一:normal(正常)、disabled(禁用)或 readonly(只读)。如果输入框为只读,则不能使用控件命令更改其值,并且即使输入焦点在控件中,也不会显示插入点;但控件的内容仍然可以选择。如果输入框被禁用,则不能更改其值,不会显示插入点,内容不可选择,并且输入框可能会以不同的颜色显示。 |
6 | validate => 字符串 指定验证应以哪种模式运行:none(无)、focus(焦点)、focusin(获取焦点)、focusout(失去焦点)、key(按键)或all(全部)。默认为none。当您需要验证时,必须明确指定要使用的模式。 |
7 | validatecommand => 字符串 指定当您要验证输入到输入框控件中的内容时要执行的脚本。 |
8 | width => 整数 指定一个整数,表示所需输入框窗口的宽度,以控件字体的平均字符大小为单位。如果该值小于或等于零,则控件会选择一个足够大的尺寸来容纳其当前文本。 |
输入框验证
我们可以通过将validatecommand选项设置为回调来验证输入的值,该回调将根据validate选项进行评估,如下所示:
none - 默认值。这意味着不会进行任何验证。
focus - 当输入框获得或失去焦点时,将调用validatecommand。
focusin - 当输入框获得焦点时,将调用validatecommand。
focusout - 当输入框失去焦点时,将调用validatecommand。
key - 当编辑输入框时,将调用validatecommand。
all - 对所有上述情况都将调用validatecommand。
操作输入框
以下是有用的方法可用于操作输入框的内容:
delete(first, ?last?) - 删除输入框的一个或多个元素。First是第一个要删除的字符的索引,last是最后一个要删除的字符之后的字符的索引。如果未指定last,则默认为first+1,即删除单个字符。此命令返回空字符串。
get - 返回输入框的字符串。
icursor(index) - 将插入点显示在由index指定的字符之前。返回空字符串。
index(index) - 返回对应于index的数字索引。
insert(index, string) - 在由index指示的字符之前插入字符串的字符。返回空字符串。
xview(args) - 此命令用于查询和更改控件窗口中文本的水平位置。
事件绑定
Ruby/Tk自动为输入框创建类绑定,使其具有以下默认行为:
单击鼠标按钮1将插入点定位在鼠标光标下方的字符之前,将输入焦点设置为此控件,并清除控件中的任何选择。使用鼠标按钮1拖动将在插入点和鼠标下的字符之间拖出选择。
双击鼠标按钮1将选择鼠标下的单词,并将插入点定位在单词的开头。双击后拖动将拖出由整个单词组成的选择。
三击鼠标按钮1将选择输入框中的所有文本,并将插入点定位在第一个字符之前。
可以通过在按下Shift键的同时使用鼠标按钮1拖动来调整选择的末端;这将调整按下按钮1时最靠近鼠标光标的选择末端。如果在拖动之前双击按钮,则选择将以整个单词为单位进行调整。
在按下Control键的同时单击鼠标按钮1将把插入点定位在输入框中,而不会影响选择。
如果在输入框中键入任何正常的打印字符,它们将插入到插入点的位置。
可以通过使用鼠标按钮2拖动来调整输入框中的视图。如果单击鼠标按钮2而不移动鼠标,则选择将复制到插入点位置的输入框中。
如果在按下按钮1的同时将鼠标从输入框的左侧或右侧拖出,则输入框将自动滚动以显示更多文本(如果在鼠标离开窗口的一侧有更多文本在屏幕外)。
向左和向右键将插入点向左或向右移动一个字符;它们还会清除输入框中的任何选择并设置选择锚点。如果在按下Shift键的同时键入向左或向右键,则插入点会移动,并且选择会扩展以包括新字符。Control-Left和Control-Right按单词移动插入点,Control-Shift-Left和Control-Shift-Right按单词移动插入点并扩展选择。Control-b和Control-f分别与向左和向右键的行为相同。Meta-b和Meta-f分别与Control-Left和Control-Right的行为相同。
Home键或Control-a会将插入点移动到输入框的开头,并清除输入框中的任何选择。Shift-Home会将插入点移动到输入框的开头,并将选择扩展到该点。
End键或Control-e会将插入点移动到输入框的末尾,并清除输入框中的任何选择。Shift-End会将插入点移动到末尾,并将选择扩展到该点。
Select键和Control-Space将选择锚点设置为插入点的位置。它们不会影响当前的选择。Shift-Select和Control-Shift-Space将选择调整到插入点的当前位置,如果之前没有选择,则从锚点到插入点进行选择。
Control-/选择输入框中的所有文本。
Control-\清除输入框中的任何选择。
F16键(在许多Sun工作站上标记为复制)或Meta-w将选择复制到剪贴板,如果存在选择。
F20键(在许多Sun工作站上标记为剪切)或Control-w将选择复制到剪贴板并删除选择。如果控件中没有选择,则这些键无效。
F18键(在许多Sun工作站上标记为粘贴)或Control-y在插入点位置插入剪贴板的内容。
Delete键删除选择(如果输入框中有选择)。如果没有选择,它将删除插入点右侧的字符。
BackSpace键和Control-h删除选择(如果输入框中有选择)。如果没有选择,它将删除插入点左侧的字符。
Control-d删除插入点右侧的字符。
Meta-d删除插入点右侧的单词。
Control-k删除插入点右侧的所有字符。
Control-w删除插入点左侧的单词。
Control-t反转插入点右侧的两个字符的顺序。
如果使用state选项禁用条目,则仍然可以调整条目的视图并选择条目中的文本,但不会显示插入光标,也不会进行任何文本修改。
示例
require 'tk' root = TkRoot.new root.title = "Window" entry1 = TkEntry.new(root) entry2 = TkEntry.new(root) do show '*' end variable1 = TkVariable.new variable2 = TkVariable.new entry1.textvariable = variable1 entry2.textvariable = variable2 variable1.value = "Enter any text value" variable2.value = "Enter any confidential value" entry1.place('height' => 25, 'width' => 150, 'x' => 10, 'y' => 10) entry2.place('height' => 25, 'width' => 150, 'x' => 10, 'y' => 40) Tk.mainloop
这将产生以下结果 -