Ruby/TK - 列表框小部件


描述

单选按钮显示单行文本项列表(通常很长),并允许用户浏览该列表,选择一个或多个。

首次创建时,新列表框没有元素。可以使用提供的方法添加或删除元素。另外,可以从列出的项目中选择一个或多个元素。

不必将所有元素同时显示在列表框窗口中。列表框允许使用标准xscrollcommandyscrollcommand选项在两个方向上滚动。

句法

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

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

标准选项

  • 背景
  • 边框宽度
  • 光标
  • 禁用前景
  • 出口选择
  • 字体
  • 前景
  • 高度
  • 突出显示背景
  • 突出显示颜色
  • 突出显示厚度
  • 抵消
  • 宽慰
  • 选择背景
  • 选择边框宽度
  • 选择前景
  • 设置网格
  • 聚焦
  • 宽度
  • xscroll命令
  • yscroll命令

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

小部件特定选项

先生。 选项和说明
1

activestyle => 字符串

指定绘制活动元素的样式。这必须是dotboxnoneunderline之一。默认为下划线

2

高度 => 整数

指定窗口所需的高度(以行为单位)。如果为零或小于零,则窗口的所需高度将足够大以容纳列表框中的所有元素。

3

列表变量 => 变量

指定变量的引用。变量的值是一个要在小部件内显示的数组;如果变量值发生变化,则小部件将自动更新自身以反映新值。

4

选择模式 =>字符串

指定用于操作选择的多种样式之一。该选项的值可以是任意的,但默认绑定期望它是singlebrowsermultipleExtended;默认值是浏览

5

状态 => 字符串

指定列表框的两种状态之一:正常禁用。如果列表框被禁用,则可能无法插入或删除项目。

6

宽度 => 整数

以字符为单位指定窗口所需的宽度。如果字体没有统一的宽度,则在从字符单位转换为屏幕单位时使用字符“0”的宽度。如果为零或小于零,则窗口所需的宽度将足够大以容纳列表框中的所有元素。

操作列表框项目

有多种方法可以使用列表框 -

  • listvariable - 变量允许您将变量(必须包含列表)链接到列表框该列表的每个元素都是一个字符串,代表列表框中的一项。因此,要添加、删除或重新排列列表框中的项目,您只需像操作任何其他列表一样操作此变量即可。

  • 插入idx 项目?项目...?方法用于将一项或多项添加到列表中;“idx”是一个从 0 开始的索引,指示应在其之前添加项目的位置;指定“end”将新项目放在列表末尾。

  • 删除第一个?最后一个?方法用于从列表中删除一项或多项;“first”和“last”是按照“insert”方法的索引。

  • 一个还是最后一个?方法返回给定位置处单个项目的内容,或“第一个”和“最后一个”之间的项目列表。

  • size方法返回列表中的项目数。

  • curselection方法用于找出用户当前选择了列表框中的哪个或哪些项目这将返回当前选定的所有项目的索引列表;这可能是一个空列表。

  • 选择清楚首先?最后?方法用于取消选择单个项目或指定索引范围内的任何项目。

  • 选择集首先?最后?方法用于选择一个项目或范围内的所有项目。

  • xview (args)方法用于查询和更改窗口小部件窗口中信息的水平位置。

  • yview (?args?)方法用于查询和更改小部件窗口中文本的垂直位置。

指数

列表框的许多方法都采用一个或多个索引作为参数。索引通过以下任一方式指定列表框的特定元素 -

  • number - 一个十进制数,给出文本项中所需字符的位置。0 表示第一个字符,1 表示下一个字符,依此类推。

  • active - 指示具有位置光标的元素。当列表框具有键盘焦点时,该元素将显示带有下划线,并且使用 activate 方法指定。

  • 锚点- 指示选择的锚点,通过选择锚点方法设置。

  • end - 表示列表框的结尾。对于某些命令,这意味着紧接在最后一个元素之后;对于其他命令,它意味着最后一个元素。

事件绑定

Ruby/Tk 为列表框创建类绑定,赋予它们类似 Motif 的行为。列表框的大部分行为是由其selectmode选项决定的,该选项选择处理选择的四种方式之一。

  • 如果选择方式为“单一”“浏览”,则列表框中一次最多只能选择一个元素。在这两种模式下,单击元素上的按钮 1 会选择该元素并取消选择任何其他选定的项目。在浏览模式下,还可以使用按钮 1 拖动选择。

  • 如果选择模式是multipleExtended,则可以一次选择任意数量的元素,包括不连续的范围。在多重模式下,单击元素上的按钮 1 会切换其选择状态,而不会影响任何其他元素。在扩展模式下,按某个元素上的按钮 1 将选择该元素,取消选择其他所有内容,并将锚点设置为鼠标下方的元素;使用按钮 1 向下拖动鼠标可扩展选择范围,以包括锚点和鼠标下的元素之间的所有元素(包括在内)。

大多数人可能希望使用浏览模式进行单项选择,使用扩展模式进行多项选择;其他模式似乎仅在特殊情况下有用。

除了上述行为之外,还有许多其他与列表框相关的附加行为,本教程未涵盖 -

实施例1

require "tk"

root = TkRoot.new
root.title = "Window"
list = TkListbox.new(root) do
   width 20
   height 10
   setgrid 1
   selectmode 'multiple'
   pack('fill' => 'x')
end

list.insert 0, "yellow", "gray", "green",
  "blue", "red", "black", "white", "cyan",
  "pink", "yellow", "orange", "gray"

Tk.mainloop

这将产生以下结果 -

Ruby/Tk 列表框 1

实施例2

以下是使用listvariable选项填充列表项的示例-

require "tk"

$names = %w{ yellow gray green
              blue red black white cyan
              pink yellow orange gray}
$colornames = TkVariable.new($names)

root = TkRoot.new
root.title = "Window"

list = TkListbox.new(root) do
   width 20
   height 10
   setgrid 1
   listvariable $colornames
   pack('fill' => 'x')
end

Tk.mainloop

这将产生以下结果 -

Ruby/Tk 列表框 2

实施例3

以下示例解释了如何将TkScrollbar小部件与列表框一起使用。

require "tk"

$names = %w{ yellow gray green
              blue red black white cyan
              pink yellow orange gray}
$colornames = TkVariable.new($names)

root = TkRoot.new
root.title = "Window"

list = TkListbox.new(root) do
   listvariable $colornames
   pack('fill' => 'x')
end

list.place('height' => 150,
           'width'  => 100,
           'x'      => 10,
           'y'      => 10)

scroll = TkScrollbar.new(root) do
   orient 'vertical'
   place('height' => 150, 'x' => 110)
end

list.yscrollcommand(proc { |*args|
   scroll.set(*args)
})

scroll.command(proc { |*args|
   list.yview(*args)
}) 

Tk.mainloop

这将产生以下结果 -

Ruby/Tk 列表框 3
ruby_tk_guide.htm