Ruby/TK - Spinbox 小部件


描述

Spinbox小部件允许用户选择数字(或者实际上是任意列表中的项目)。它通过将显示当前值的类似条目的小部件与一对小的向上/向下箭头相结合来实现这一点,这些箭头可用于逐步浏览可能的选择范围。

Spinbox 能够显示太长而无法完全适合小部件窗口的字符串。在这种情况下,只会显示字符串的一部分;下面描述的命令可用于更改窗口中的视图。

Spinbox 使用标准xscrollcommand机制与滚动条交互。

句法

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

TkSpinbox.new(root) {
   .....Standard Options....
   .....Widget-specific Options....
}

标准选项

  • 活动背景
  • 背景
  • 边框宽度
  • 光标
  • 出口选择
  • 字体
  • 前景
  • 突出显示背景
  • 突出显示颜色
  • 突出显示厚度
  • 证明合法
  • 宽慰
  • 重复延迟
  • 重复间隔
  • 选择背景
  • 选择边框宽度
  • 选择前景
  • 聚焦
  • 文本变量
  • xscroll命令

这些选项已在前一章中进行了描述。

小部件特定选项

先生。 选项和说明
1

按钮背景 => 字符串

用于旋转按钮的背景颜色。

2

按钮光标 => 字符串

用于旋转按钮上方的光标。如果为空(默认),则将使用默认光标。

3

Buttondownrelief => 字符串

用于上部旋转按钮的浮雕。

4

命令 =>字符串

指定每当调用 Spinbutton 时要调用的 Ruby/Tk 回调。回调将这两个参数附加到任何现有的回调参数中:小部件的当前值和按钮按下的方向(向上向下)。

5

禁用背景 => 字符串

指定禁用旋转框时要使用的背景颜色。如果此选项为空字符串,则使用普通背景颜色。

6

禁用前景 => 字符串

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

7

格式 =>字符串

指定在使用起始范围和终止范围设置字符串值时要使用的替代格式。

8

来自 => 整数

与 Spinbox 的最低值相对应的浮点值,与toincrement结合使用。

9

增量 =>字符串

指定增量的浮点值。当与fromto一起使用时,按下旋转按钮时,小部件中的值将按增量进行调整(向上添加值,向下减去值)。

10

状态 => 字符串

指定 Spinbox 的三种状态之一:正常禁用只读

11

=> 整数

与 Spinbox 的最高值相对应的浮点值,与fromincrement结合使用。当所有内容都正确指定后,Spinbox 将使用这些值来控制其内容。该值必须大于from选项。如果指定了值,它将取代此选项。

12

验证 =>字符串

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

13

验证命令 =>字符串

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

14

=> 整数

必须是正确的列表值。如果指定,Spinbox 将使用这些值来控制其内容,从第一个值开始。此选项优先于fromto范围。

15

宽度 => 整数

指定一个整数值,指示 Spinbox 窗口的所需宽度(以小部件字体的平均大小字符表示)。

16

换行 => 布尔值

必须是正确的布尔值。如果打开,Spinbox 将环绕小部件中的数据值。

验证阶段

验证通过将validatecommand选项设置为回调来进行,该回调将根据 validate 选项进行评估,如下所示 -

  • - 默认。这意味着不会发生任何验证。

  • focus -当 Spinbox 接收或失去焦点时将调用validatecommand 。

  • focusin -当 Spinbox 接收焦点时将调用validatecommand 。

  • focusout -当 Spinbox 失去焦点时将调用validatecommand 。

  • key -编辑 Spinbox 时将调用validatecommand 。

  • all -对于上述所有条件将调用validatecommand 。

操纵旋转盒

以下是使用 Spinbox 的一些重要方法的列表 -

  • delete(first, ?last?) - 删除 Spinbox 的一个或多个元素。First是要删除的第一个字符的索引,last是要删除的最后一个字符之后的字符的索引。如果未指定last ,则默认为first +1,即删除单个字符。该命令返回一个空字符串。

  • get - 返回 Spinbox 的字符串。

  • icursor(index) - 安排插入光标显示在索引给定的字符之前。返回一个空字符串。

  • recognize(x, y) - 返回与 Spinbox 中的坐标xy相对应的窗口元素的名称。返回值为以下之一:nonebuttondownbuttonupentry

  • index(index) - 返回与索引相对应的数字索引。

  • insert(index, string) - 在索引指示的字符之前插入字符串的字符。返回一个空字符串。

  • invoke(element) - 导致指定的元素(buttondownbuttonup)被调用,触发与其关联的操作。

  • set(?string?) - 如果指定了字符串,Spinbox 将尝试将其设置为该值,否则它只返回 Spinbox 的字符串。如果启用验证,则会在设置字符串时发生。

  • validate - 该命令用于强制对validate 命令进行评估,而与validate选项指定的条件无关。这是通过暂时将validate选项设置为all来完成的。它返回 0 或 1。

  • xview(args) - 此命令用于查询和更改小部件窗口中文本的水平位置。

事件绑定

Tk 自动为 Spinbox 创建类绑定,赋予它们默认行为。下面给出了一些重要的行为 -

  • 单击鼠标按钮 1,将插入光标定位在鼠标光标下方的字符之前,将输入焦点设置到该小部件,并清除小部件中的所有选择。使用鼠标按钮 1 进行拖动,在插入光标和鼠标下的字符之间划出一个选区。

  • 双击鼠标按钮 1,选择鼠标下的单词并将插入光标定位在单词的开头。双击后拖动将划出由整个单词组成的选区。

  • 用鼠标按钮 1 单击三次,选择旋转框中的所有文本,并将插入光标定位在第一个字符之前。

  • 可以通过按住 Shift 键的同时使用鼠标按钮 1 拖动来调整选区的末端;当按下按钮 1 时,这将调整最接近鼠标光标的选择的末尾。如果在拖动之前双击该按钮,则将以整个单词为单位调整选择。

  • 按住 Control 键单击鼠标按钮 1,会将插入光标定位在旋转框中,而不影响选择。

  • 如果在 Spinbox 中键入任何普通打印字符,它们将被插入到插入光标所在的位置。

  • 可以通过使用鼠标按钮 2 进行拖动来调整旋转框中的视图。如果单击鼠标按钮 2 而不移动鼠标,则所选内容将复制到旋转框中鼠标光标所在的位置。

  • 如果在按下按钮 1 的同时将鼠标从左侧或右侧拖出旋转框,旋转框将自动滚动以使更多文本可见(如果鼠标离开窗口的一侧有更多文本离屏) 。

  • End 键或 Control-e 会将插入光标移动到旋转框的末尾,并清除旋转框中的所有选择。Shift-End 将光标移动到末尾并将选择范围扩展到该点。

  • Home 键或 Control-a 会将插入光标移动到旋转框的开头,并清除旋转框中的所有选择。Shift-Home 将插入光标移动到旋转框的开头,并将选择范围扩展到该点。

  • Control-/ 选择旋转框中的所有文本。

  • Control-\ 清除旋转框中的所有选择。

  • 如果旋转框中有选择,则按删除键可删除该选择。如果没有选择,它将删除插入光标右侧的字符。

  • BackSpace 键和 Control-h 删除所选内容(如果旋转框中有)。如果没有选择,它将删除插入光标左侧的字符。

  • Control-d 删除插入光标右侧的字符。

  • Meta-d 删除插入光标右侧的单词。

  • Control-k 删除插入光标右侧的所有字符。

例子

require 'tk'

root = TkRoot.new
root.title = "Window"
Sb = TkSpinbox.new(root) do
   to 100
   from 5
   increment 5
   pack("side" => "left",  "padx"=> "50", "pady"=> "50")
end

Tk.mainloop

这将产生以下结果 -

Ruby/Tk 旋转盒
ruby_tk_guide.htm