- Ruby 基础
- Ruby - 主页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 代码块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件输入/输出
- Ruby - 异常
Ruby/Tk - 滚动条小组件
说明
滚动条可帮助用户查看其他小组件的所有部分,其内容通常远大于可用屏幕空间所能显示的内容。
滚动条在滚动条两端显示两个箭头,在滚动条中部显示一个滑块。滑块的位置和大小指示哪些文档部分在关联窗口中可见。
语法
以下是创建此小组件的简单语法 -
TkScrollbar.new {
.....Standard Options....
.....Widget-specific Options....
}
标准选项
- activebackground
- highlightbackground
- orient
- takefocus
- background
- highlightcolor
- relief
- troughcolor
- borderwidth
- highlightthickness
- repeatdelay
- cursor
- jump
- repeatinterval
这些选项已在上一章中描述。
小组件特定选项
| 序号 | 选项和说明 |
|---|---|
| 1 | activerelief => 字符串 指定在显示任何活动元素时要使用的浮雕(如果有)。除活动元素之外的其他元素始终会显示为浮雕。 |
| 2 | command => 字符串 指定要调用的回调来更改与滚动条关联的小组件中的视图。当用户通过操作滚动条来请求视图更改时,将调用回调。 |
| 3 | elementborderwidth => 整数 指定在滚动条内部元素周围绘制的边框的宽度。 |
| 4 | width => 整数 指定滚动条窗口所需的窄尺寸,不包括 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 自动为滚动条创建类绑定,赋予滚动条以下默认行为。如果垂直滚动条和水平滚动条的行为不同,则水平行为以括号描述 −
按 arrow1 上的按钮 1 可使关联小部件中的视图向上(向左)移动一个单位,以便文档向下(向右)移动一个单位。如果按钮被按下,则该动作将自动重复。
按 trough1 上的按钮 1 可使关联小部件中的视图向上(向左)移动一个屏幕大小,以便文档向下(向右)移动一个屏幕大小。如果按钮被按下,则该动作将自动重复。
按滑块上的按钮 1 并拖动可导致视图随滑块拖动。如果 jump 选项为真,则视图不会随滑块拖动;仅在松开鼠标按钮时才会更改视图。
按 trough2 上的按钮 1 可使关联小部件中的视图向下(向右)移动一个屏幕大小,以便文档向上(向左)移动一个屏幕大小。如果按钮被按下,则该动作将自动重复。
按 arrow2 上的按钮 1 可使关联小部件中的视图向下(向右)移动一个单位,以便文档向上(向左)移动一个单位。如果按钮被按下,则该动作将自动重复。
如果在槽或滑块上按按钮 2,则它会设置视图以对应于鼠标位置;按住按钮 2 拖动鼠标可导致视图随鼠标拖动。如果在其中一个箭头处按按钮 2,则会导致与按按钮 1 相同的行为。
如果按住 Control 键按下按钮 1,则如果鼠标位于 arrow1 或 trough1 上,则视图会更改为文档的顶部(左侧);如果鼠标位于 arrow2 或 trough2 上,则视图会更改为文档的底部(右侧);如果鼠标位于其他任何地方,则按钮按下无效。
在垂直滚动条中,向上和向下键具有与鼠标分别在箭头 1 和箭头 2 上的单击相同的作用。在水平滚动条中,这些键无任何作用。
在垂直滚动条中,Control-Up 和 Control-Down 键具有与鼠标分别在槽 1 和槽 2 上的单击相同的作用。在水平滚动条中,这些键无任何作用。
在水平滚动条中,向上和向下键具有与鼠标分别在箭头 1 和箭头 2 上单击相同的作用。在垂直滚动条中,这些键无任何作用。
在水平滚动条中,Control-Up 和 Control-Down 键具有与鼠标分别在槽 1 和槽 2 上的单击相同的作用。在垂直滚动条中,这些键无任何作用。
Prior 和 Next 键分别具有与鼠标在槽 1 和槽 2 上单击相同的作用。
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
这将产生以下结果 −