- Ruby基础知识
- Ruby - 主页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 评论
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 例外
Ruby/Tk - 滚动条小部件
描述
滚动条可帮助用户查看另一个小部件的所有部分,其内容通常比可用屏幕空间中可以显示的内容大得多。
滚动条显示两个箭头,滚动条的每一端各有一个箭头,滚动条的中间部分有一个滑块。滑块的位置和大小指示文档的哪一部分在关联窗口中可见。
句法
这是创建此小部件的简单语法 -
TkScrollbar.new { .....Standard Options.... .....Widget-specific Options.... }
标准选项
- 活动背景
- 突出显示背景
- 东方
- 聚焦
- 背景
- 突出显示颜色
- 宽慰
- 槽色
- 边框宽度
- 突出显示厚度
- 重复延迟
- 光标
- 跳
- 重复间隔
这些选项已在前一章中进行了描述。
小部件特定选项
先生。 | 选项和说明 |
---|---|
1 | activerelief => 字符串 指定显示活动元素(如果有)时要使用的浮雕。除活动元素之外的元素始终以浮雕形式显示。 |
2 | 命令 =>字符串 指定要调用的回调以更改与滚动条关联的小部件中的视图。当用户通过操作滚动条请求视图更改时,将调用回调。 |
3 | 元素边框宽度 => 整数 指定围绕滚动条内部元素绘制的边框的宽度。 |
4 | 宽度 => 整数 指定滚动条窗口所需的窄尺寸,不包括 3D 边框(如果有)。对于垂直滚动条,这将是宽度,对于水平滚动条,这将是高度。 |
滚动条的元素
滚动条显示五个元素,这些元素在滚动条的方法中引用 -
arrow1 - 滚动条中的顶部或左侧箭头。
trough1 - 滑块和 arrow1 之间的区域。
slider - 指示关联小部件中可见内容的矩形。
trough2 - 滑块和 arrow2 之间的区域。
arrow2 - 滚动条中的底部或向右箭头。
操纵滚动条
以下有用的方法来操纵滚动条的内容 -
activate(?element?) - 将element指示的元素标记为活动的,这会导致它按照activebackground和activerelief选项指定的方式显示。此命令只能理解的元素值是arrow1、slider或arrow2。
delta(deltaX, deltaY) - 返回一个实数,指示与滑块位置的给定变化相对应的滚动条设置的分数变化。
fraction(x, y) - 返回 0 到 1 之间的实数,指示 x 和 y 给出的点位于滚动条的谷底区域中的位置。值 0 对应于波谷的顶部或左侧,值 1 对应于底部或右侧,0.5 对应于中间,依此类推。
get - 以列表的形式返回滚动条设置,其元素是最近 set 方法的参数。
identify(x, y) - 返回 x 和 y 给定点下的元素名称(例如 arrow1),如果该点不位于滚动条的任何元素中,则返回空字符串。X 和 y 必须是相对于滚动条小部件的像素坐标。
set(first, last) - 该命令由滚动条的关联小部件调用,以告诉滚动条小部件中的当前视图。该命令采用两个参数,每个参数都是 0 到 1 之间的实数分数。这些分数描述了关联小部件中可见的文档范围。
事件绑定
Ruby/Tk 自动为滚动条创建类绑定,赋予它们以下默认行为。如果垂直和水平滚动条的行为不同,则水平行为在括号中描述 -
按箭头 1 上的按钮 1 会使关联小部件中的视图向上(向左)移动一个单位,以便文档看起来向下(向右)移动一个单位。如果按住该按钮,该操作会自动重复。
在 trough1 上按下按钮 1 会导致关联小部件中的视图向上(向左)移动一屏,以便文档看起来向下(向右)移动一屏。如果按住该按钮,该操作会自动重复。
按滑块上的按钮 1 并拖动会导致视图随滑块拖动。如果跳转选项为 true,则视图不会随滑块一起拖动;仅当释放鼠标按钮时它才会发生变化。
在槽 2 上按按钮 1 会导致关联小部件中的视图向下(右)移动一屏,从而使文档看起来向上(左)移动一屏。如果按住该按钮,该操作会自动重复。
按箭头 2 上的按钮 1 会使关联小部件中的视图向下(右)移动一个单位,以便文档看起来向上(左)移动一个单位。如果按住该按钮,该操作会自动重复。
如果在槽或滑块上按下按钮 2,则会将视图设置为与鼠标位置相对应;按下按钮 2 拖动鼠标会导致视图随鼠标拖动。如果在其中一个箭头上按下按钮 2,则会导致与按下按钮 1 相同的行为。
如果在按下 Control 键的同时按下按钮 1,则如果鼠标位于 arrow1 或 trough1 上方,视图将更改为文档的最顶部(左侧);如果鼠标悬停在 arrow2 或 trough2 上,视图将更改为文档的最底部(右侧);如果鼠标在其他地方,则按下按钮无效。
在垂直滚动条中,向上键和向下键分别与鼠标单击箭头 1 和箭头 2 具有相同的行为。在水平滚动条中这些键不起作用。
在垂直滚动条中,Control-Up 和 Control-Down 的行为分别与鼠标在 trough1 和 trough2 上单击的行为相同。在水平滚动条中这些键不起作用。
在水平滚动条中,向上键和向下键分别与鼠标单击箭头 1 和箭头 2 具有相同的行为。在垂直滚动条中,这些键不起作用。
在水平滚动条中,Control-Up 和 Control-Down 的行为分别与鼠标在 trough1 和 trough2 上单击的行为相同。在垂直滚动条中,这些键不起作用。
Prior 和 Next 键分别与鼠标在 trough1 和 trough2 上单击具有相同的行为。
Home 键将视图调整到文档的顶部(左边缘)。
End 键将视图调整到文档的底部(右边缘)。
例子
require "tk" list = scroll = nil list = TkListbox.new { yscroll proc{|idx| scroll.set *idx } width 20 height 16 setgrid 1 pack('side' => 'left', 'fill' => 'y', 'expand' => 1) } scroll = TkScrollbar.new { command proc{|idx| list.yview *idx } pack('side' => 'left', 'fill' => 'y', 'expand' => 1) } for f in Dir.glob("*") list.insert 'end', f end Tk.mainloop
这将产生以下结果 -