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 回调。 回调将这两个参数 附加 到任何现有的回调参数:小部件的当前值和按钮按下的方向(updown)。

5

disabledbackground => String

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

6

disabledforeground => String

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

7

format => String

指定在使用 fromto 范围时设置字符串值时使用的替代格式。

8

from => Integer

一个浮点值,对应于 Spinbox 的最小值,与 toincrement 结合使用。

9

increment => String

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

10

state => String

指定 Spinbox 的三种状态之一:normaldisabledreadonly

11

to => Integer

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

12

validate => String

指定验证操作的模式:nonefocusfocusinfocusoutkey< /b>,或全部。 它默认为 none。 当您需要验证时,您必须明确说明您希望使用哪种模式。

13

validatecommand => String

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

14

values => Integer

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

15

width => Integer

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

16

wrap => Boolean

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


验证阶段

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

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

  • focusvalidatecommand 将在 Spinbox 接收或失去焦点时调用。

  • focusinvalidatecommand 将在 Spinbox 获得焦点时调用。

  • focusoutvalidatecommand 将在 Spinbox 失去焦点时被调用。

  • keyvalidatecommand 将在 Spinbox 被编辑时被调用。

  • allvalidatecommand 将针对上述所有条件调用。


操纵 Spinbox

这里列出了一些使用 Spinbox 的重要方法 −

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

  • get − 返回 Spinbox 的字符串。

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

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

  • index(index) − 返回 index 对应的数值索引。

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

  • invoke(element) − 使指定的元素(buttondownbuttonup)被调用,从而触发与其关联的操作。

  • 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

这将产生以下结果 −

Ruby/Tk Spin Box

❮ Ruby Tk 指南