Ruby/TK - Entry 条目小部件

说明

Entry 为用户提供了一个单行文本字段,用户可以使用该字段输入值。 这些几乎可以是任何东西:他们的名字、城市、密码、社会安全号码等等。

语法

这是创建此小部件的简单语法 −

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 => String

指定禁用条目时要使用的背景颜色。 如果此选项为空字符串,则使用正常的背景颜色。

2

disabledforeground => String

指定禁用条目时要使用的前景色。 如果此选项为空字符串,则使用正常的前景色。

3

readonlybackground => String

指定条目为只读时要使用的背景颜色。 如果此选项为空字符串,则使用正常的背景颜色。

4

show => String

如果指定了此选项,则条目的真实内容不会显示在窗口中。 相反,条目值中的每个字符都将显示为此选项值中的第一个字符,例如"*"。 这很有用,例如,如果要使用该条目输入密码。 如果条目中的字符被选中并复制到别处,复制的信息将是显示的内容,而不是条目的真实内容。

5

state => String

指定条目的三种状态之一:normaldisabledreadonly。 如果条目是readonly,那么即使输入焦点在小部件中,也不能使用小部件命令更改值并且不会显示插入光标; 小部件的内容仍可能被选中。 如果条目是disabled,则值可能不会改变,不会显示插入光标,内容将无法选择,并且条目可能会以不同的颜色显示。

6

validate => String

指定验证操作的模式:nonefocusfocusinfocusoutkeyall。 它默认为 none。 当您需要验证时,您必须明确说明您希望使用哪种模式。

7

validatecommand => String

当您要验证输入小部件的输入时,指定要评估的脚本。

8

width => Integer

指定一个整数值,指示输入窗口的所需宽度,以小部件字体的平均大小字符表示。 如果该值小于或等于零,则小部件会选择一个足够大以容纳其当前文本的大小。


验证条目

我们可以通过将 validatecommand 选项设置为回调来验证输入的值,回调将根据 validate 选项进行评估,如下所示 −

  • none − 默认。 这意味着不会发生验证。

  • focus − 当条目获得或失去焦点时将调用 validatecommand。

  • focusin − 当条目获得焦点时将调用 validatecommand。

  • focusout − 当条目失去焦点时将调用 validatecommand。

  • key − v编辑条目时将调用alidatecommand。

  • 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 时将鼠标拖出左侧或右侧的条目,则条目将自动滚动以显示更多文本(如果鼠标离开窗口的一侧有更多文本离屏) .

  • Left 和 Right 键将插入光标向左或向右移动一个字符; 他们还清除条目中的任何选择并设置选择锚。 如果在按下 Shift 键的情况下键入 Left 或 Right,则插入光标会移动,并且选择会扩展以包含新字符。 Control-Left 和 Control-Right 按单词移动插入光标,Control-Shift-Left 和 Control-Shift-Right 按单词移动插入光标并扩展选择。 Control-b 和 Control-f 的行为分别与 Left 和 Right 相同。 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 工作站上标记为 Copy)或 Meta-w 将小部件中的选择复制到剪贴板(如果有选择)。

  • F20 键(在许多 Sun 工作站上标记为 Cut)或 Control-w 将小部件中的选择复制到剪贴板并删除选择。 如果小部件中没有选择,则这些键无效。

  • F18 键(在许多 Sun 工作站上标记为 Paste)或 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

这将产生以下结果 −

Ruby/Tk Entry

❮ Ruby Tk 指南