Ruby/TK - Spinbox 小部件
说明
Spinbox 小部件允许用户选择数字(或者实际上是任意列表中的项目)。 它通过将显示当前值的类似条目的小部件与一对小的向上/向下箭头相结合来实现这一点,该箭头可用于逐步浏览可能的选择范围。
Spinbox 能够显示太长而无法完全放入小部件窗口的字符串。 在这种情况下,只会显示字符串的一部分; 下面描述的命令可用于更改窗口中的视图。
Spinbox 使用标准的 xscrollcommand 机制与滚动条交互。
语法
这是创建此小部件的简单语法 −
TkSpinbox.new(root) { .....Standard Options.... .....Widget-specific Options.... }
标准选项
- activebackground
- background
- borderwidth
- cursor
- exportselection
- font
- foreground
- highlightbackground
- highlightcolor
- highlightthickness
- justify
- relief
- repeatdelay
- repeatinterval
- selectbackground
- selectborderwidth
- selectforeground
- takefocus
- textvariable
- xscrollcommand
这些选项已在前一章中描述。
小部件特定选项
序号 | 选项 & 描述 |
---|---|
1 | buttonbackground => String 用于旋转按钮的背景颜色。 |
2 | buttoncursor => String 用于在旋转按钮上的光标。 如果这是空的(默认值),将使用默认光标。 |
3 | buttondownrelief => String 用于上部旋转按钮的浮雕。 |
4 | command => String 指定在调用 Spinbutton 时要调用的 Ruby/Tk 回调。 回调将这两个参数 附加 到任何现有的回调参数:小部件的当前值和按钮按下的方向(up 或 down)。 |
5 | disabledbackground => String 指定禁用 Spinbox 时使用的背景颜色。 如果此选项为空字符串,则使用正常的背景颜色。 |
6 | disabledforeground => String 指定禁用 Spinbox 时使用的前景色。 如果此选项为空字符串,则使用正常的前景色。 |
7 | format => String 指定在使用 from 和 to 范围时设置字符串值时使用的替代格式。 |
8 | from => Integer 一个浮点值,对应于 Spinbox 的最小值,与 to 和 increment 结合使用。 |
9 | increment => String 指定增量的浮点值。 当与 from 和 to 一起使用时,小部件中的值将在按下旋转按钮时按 increment 进行调整(向上添加值, 向下减去该值)。 |
10 | state => String 指定 Spinbox 的三种状态之一:normal、disabled 或 readonly。 |
11 | to => Integer 一个浮点值,对应于 Spinbox 的最大值,与 from 和 increment 结合使用。 正确指定所有内容后,Spinbox 将使用这些值来控制其内容。 该值必须大于 from 选项。 如果指定了 values,它将取代此选项。 |
12 | validate => String 指定验证操作的模式:none、focus、focusin、focusout、key< /b>,或全部。 它默认为 none。 当您需要验证时,您必须明确说明您希望使用哪种模式。 |
13 | validatecommand => String 指定要在您想要验证小部件中的输入时评估的脚本。 |
14 | values => Integer 必须是正确的列表值。 如果指定,Spinbox 将使用这些值来控制其内容,从第一个值开始。 此选项优先于 from 和 to 范围。 |
15 | width => Integer 指定一个整数值,指示 Spinbox 窗口的所需宽度,以小部件字体的平均大小字符表示。 |
16 | wrap => Boolean 必须是正确的布尔值。 如果打开,Spinbox 将环绕小部件中的数据值。 |
验证阶段
验证通过将 validatecommand 选项设置为回调来工作,回调将根据 validate 选项进行评估,如下所示 −
none − 默认。 这意味着不会发生验证。
focus − validatecommand 将在 Spinbox 接收或失去焦点时调用。
focusin − validatecommand 将在 Spinbox 获得焦点时调用。
focusout − validatecommand 将在 Spinbox 失去焦点时被调用。
key − validatecommand 将在 Spinbox 被编辑时被调用。
all − validatecommand 将针对上述所有条件调用。
操纵 Spinbox
这里列出了一些使用 Spinbox 的重要方法 −
delete(first, ?last?) −删除 Spinbox 的一个或多个元素。 First 是要删除的第一个字符的索引,last 是要删除的最后一个字符之后的字符的索引。 如果未指定 last,则默认为 first+1,即删除单个字符。 此命令返回一个空字符串。
get − 返回 Spinbox 的字符串。
icursor(index) − 安排插入光标显示在 index 给出的字符之前。 返回一个空字符串。
identify(x, y) − 返回与 Spinbox 中坐标 x 和 y 对应的窗口元素的名称。 返回值是以下之一:none、buttondown、buttonup、entry。
index(index) − 返回 index 对应的数值索引。
insert(index, string) − 在 index 指示的字符之前插入字符串的字符。 返回一个空字符串。
invoke(element) − 使指定的元素(buttondown 或 buttonup)被调用,从而触发与其关联的操作。
set(?string?) − 如果指定了 f 字符串,则 Spinbox 将尝试将其设置为该值,否则仅返回 Spinbox 的字符串。 如果验证打开,它将在设置字符串时发生。
validate − 此命令用于强制对 validatecommand 进行评估,而与 validate 选项指定的条件无关。 这是通过将 validate 选项临时设置为 all 来完成的。 它返回 0 或 1。
xview(args) − 此命令用于查询和更改小部件窗口中文本的水平位置。
事件绑定
Tk 自动为 Spinboxes 创建类绑定,为它们提供默认行为。 下面给出了几个重要的行为 −
单击鼠标按钮 1,将插入光标定位在鼠标光标下方的字符之前,将输入焦点设置为此小部件,并清除小部件中的任何选择。 用鼠标按钮 1 拖动,在插入光标和鼠标下的字符之间划出一个选择。
用鼠标按钮 1 双击,选择鼠标下的单词并将插入光标定位在单词的开头。 双击后拖动将勾勒出由整个单词组成的选择。
用鼠标按钮 1 三次单击,选择 Spinbox 中的所有文本并将插入光标定位在第一个字符之前。
选择的末端可以通过鼠标按钮 1 拖动来调整,同时按住 Shift 键; 这将调整按下按钮 1 时最接近鼠标光标的选择的结尾。 如果在拖动之前双击按钮,则选择将以整个单词为单位进行调整。
在按住 Control 键的情况下单击鼠标按钮 1,将插入光标定位在 Spinbox 中,而不影响选择。
如果在 Spinbox 中键入任何正常的打印字符,它们将插入到插入光标的位置。
Spinbox 中的视图可以通过用鼠标按钮 2 拖动来调整。如果在不移动鼠标的情况下单击鼠标按钮 2,则选择将复制到鼠标光标所在位置的 Spinbox 中。
如果在按下按钮 1 的同时将鼠标从左侧或右侧拖出 Spinbox,则 Spinbox 将自动滚动以显示更多文本(如果在鼠标离开窗口的一侧有更多文本离屏) .
End 键或 Control-e 会将插入光标移动到 Spinbox 的末尾并清除 Spinbox 中的任何选择。 Shift-End 将光标移动到末尾并将选择扩展到该点。
Home 键或 Control-a 会将插入光标移动到 Spinbox 的开头并清除 Spinbox 中的任何选择。 Shift-Home 将插入光标移动到 Spinbox 的开头,并将选择扩展到该点。
Control-/ 选择 Spinbox 中的所有文本。
Control-\ 清除 Spinbox 中的任何选择。
Delete 键删除选择,如果在 Spinbox 中有一个。 如果没有选择,则删除插入光标右侧的字符。
BackSpace 键和 Control-h 删除选择(如果 Spinbox 中有一个)。 如果没有选择,则删除插入光标左侧的字符。
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
这将产生以下结果 −