22. 小部件Scrollbar
许多小部件(如列表框和画布)可以 就像将窗口滑动到更大的虚拟区域一样。你 可以将滚动条小部件连接到它们,为用户提供 相对于内容滑动视图的方式。 下面是带有关联条目小部件的屏幕截图 滚动条小部件:
-
滚动条可以是水平的,如上所示, 或垂直。具有两个可滚动的小部件 维度(如画布或列表框)可以同时具有两者 水平滚动条和垂直滚动条。
-
滑块或滚动 拇指,是凸起的矩形, 显示当前滚动位置。
-
两个三角形箭头在 每一端都用于移动小位置 步骤。左边或上面的那个叫,右边或底部的叫 叫。
arrow1
arrow2
-
低谷是凹陷的样子 箭头和滑块后面可见的区域。这 槽分为两个命名区域(滑块上方或左侧) 和(在下方或右侧 滑块)。
trough1
trough2
-
滑块相对于长度的大小和位置 的整个小部件中,显示大小和位置 相对于其总大小的视图。例如,如果 垂直滚动条与列表框相关联,并且 它的滑块从高度的 50% 延伸到 75% 滚动条,这意味着可见部分的 列表框显示整个列表的该部分开始 在中途标记处,在四分之三处结束 马克。
-
在水平滚动条中,单击 B1(按钮 1) 左箭头将视图移动少量到 左边。单击右侧箭头上的 B1 可移动 按右边的金额查看。对于垂直 滚动条,单击向上和向下指向 箭头将视图向上或向下少量移动。 请参阅关联小部件的讨论 找出这些操作移动的确切金额 视图。
-
用户可以拖动带有 B1 或 B2 的滑块(中间 按钮)以移动视图。
-
对于水平滚动条,单击槽中的 B1 滑块左侧的视图向左移动 页面,然后单击 B1 在 滑块将视图向右移动一页。对于一个 垂直滚动条,相应的动作移动 向上或向下查看页面。
-
在槽中的任意位置单击 B2 可移动滑块 使其左端或顶端位于鼠标处,或作为 尽可能接近它。
归一化位置 滚动条是指闭合区间 [0.0, 1.0],用于定义滑块的位置。对于垂直 滚动条,位置 0.0 位于顶部,1.0 位于 底;对于水平滚动条,位置 0.0 位于 左端和右端 1.0。
创建新小部件作为 根窗口或框架的子窗口:Scrollbar
parent
w = tk.Scrollbar(parent, option, ...)
构造函数返回新小部件。滚动条的选项包括:Scrollbar
表 31.滚动条
小部件选项
activebackground |
滑块和箭头的颜色当 鼠标在他们身上。请参见第 5.3 节 “颜色”。 |
activerelief |
默认情况下,滑块以浮雕样式显示。要显示 当鼠标悬停在 滑 块。tk.RAISED |
bg 或background |
颜色 鼠标未结束时的滑块和箭头 他们。 |
bd 或borderwidth |
整个 3-D 边框的宽度 槽的周长,以及 箭头和滑块上的三维效果。违约 是低谷周围没有边框,一个两像素 箭头和滑块周围的边框。为 可能的值,请参见第 3.5 节 “尺寸”。 |
command |
每当滚动条出现时要调用的过程 搬。有关调用序列的讨论, 请参见第 22.1 节 “滚动条命令回调”。 |
cursor |
鼠标悬停在 滚动条。请参见第 5.8 节 “游标”。 |
elementborderwidth |
箭头周围的边框宽度和 滑 块。默认值为 ,表示使用 选项的值。elementborderwidth=-1 borderwidth |
highlightbackground |
颜色 滚动条没有焦点时突出显示 重点。请参见第 53 节 “焦点:路由键盘输入”。 |
highlightcolor |
颜色 当滚动条具有焦点时,焦点突出显示。 |
highlightthickness |
焦点的粗细突出显示。默认值为 。设置为 禁止显示焦点高亮。1 0 |
jump |
此选项控制用户拖动时发生的情况 滑块。通常 (), 滑块的每一次小拖动都会导致调用回调。如果您设置 此选项为 ,回调不是 调用,直到用户释放鼠标按钮。jump=0 command 1 |
orient |
设置为 水平滚动条,用于垂直滚动条(默认方向)。orient=tk.HORIZONTAL orient=tk.VERTICAL |
relief |
控制浮雕 小部件的样式;默认样式为 。此选项无效 在窗口中。tk.SUNKEN |
repeatdelay |
此选项控制按钮 1 的长度 在滑块启动之前按住低谷 反复朝那个方向移动。默认值为 ,单位为 毫秒。repeatdelay=300 |
repeatinterval |
此选项控制滑块移动的频率 在槽中按住按钮 1 时重复此操作。 默认值为 ,并且 单位为毫秒。repeatinterval=100 |
takefocus |
通常,您可以通过滚动条按 Tab 键调整焦点 控件;请参见第 53 节 “焦点:路由键盘输入”。如果您不想要此设置,请设置 行为。滚动条的默认键绑定 允许用户使用←和→ 箭头键移动水平滚动条,它们 可以使用 ↑ 和 ↓ 键移动 垂直滚动条。takefocus=0 |
troughcolor |
颜色 槽。 |
width |
滚动条的宽度(其 y 维度如果 水平,如果垂直,则为 x 维)。 默认值为 16。有关可能的值,请参见第 5.1 节 “维度”。 |
滚动条对象上的方法包括:
.activate(element=None)
如果未提供参数,则此方法返回一个 的字符串、、或 ,具体取决于鼠标所在的位置。为 例如,如果鼠标位于滑块上,则该方法返回。空字符串为 如果鼠标当前不在任何一个上,则返回 三个控件。'arrow1'
'arrow2'
'slider'
''
'slider'
若要突出显示其中一个控件(使用其浮雕样式和颜色),请调用此方法 并传递一个字符串,标识要标识的控件 突出显示、 、 或 之一。activerelief
activebackground
'arrow1'
'arrow2'
'slider'
.delta(
dx
, dy
)
给定鼠标移动(以像素为单位),此方法返回应添加到当前滑块位置的值 以实现相同的运动。该值必须位于 闭合区间 [-1.0, 1.0]。(
dx
, dy
)float
.fraction(
x
, y
)
给定一个像素位置,此方法返回相应的 区间 [0.0, 1.0] 中的归一化滑块位置 最接近该位置。(
x
, y
)
.get()
返回两个数字 (, ),描述 滑块的当前位置。该值给出 滑块左边缘或上边缘的位置,用于 分别为水平和垂直滚动条;价值 给出右边缘或下边缘的位置。每 值位于区间 [0.0, 1.0] 中,其中 0.0 是 最左边或顶部位置,1.0 是最右边或 底部位置。例如,如果滑块扩展 从中途到四分之三 低谷,你可能会得到元组 (0.5,0.75)。a
b
a
b
.identify(
x
, y
)
此方法返回一个字符串,指示哪个 (if 任何)的滚动条组件位于 给定坐标。 返回值为 、 或 之一 空字符串(如果该位置) 不在任何滚动条组件上。(
x
, y
)'arrow1'
'trough1'
'slider'
'trough2'
'arrow2'
''
.set(
first
, last
)
要将滚动条连接到另一个小部件,请将 的 或 设置为滚动条的方法。参数具有相同的 含义为方法返回的值。请注意,移动 滚动条的滑块不移动 相应的小部件。w
w
xscrollcommand
yscrollcommand
.set
.get()
22.1. 回调Scrollbar command
command
当用户操作滚动条时,滚动条 调用其回调。论点 此调用取决于用户执行的操作:command
-
当用户请求移动一个时 “单位”向左或向上,例如 单击左侧或顶部箭头上的按钮 B1,即 回调的参数如下所示:
command(tk.SCROLL, -1, tk.UNITS)
-
当用户请求向右移动一个单元时 或向下,参数为:
command(tk.SCROLL, 1, tk.UNITS)
-
当用户请求向左移动一页或 向上:
command(tk.SCROLL, -1, tk.PAGES)
-
当用户请求向右移动一页时 或向下:
command(tk.SCROLL, 1, tk.PAGES)
-
当用户将滑块拖动到范围内的值时 [0,1],其中 0 表示一直向左或向上,1 表示一直向右或向下,调用是:
f
command(tk.MOVETO, f)
这些调用序列与 画布、列表框和文本小组件的 和 方法。小部件没有方法。请参见第 10.1 节 “滚动条目小部件”。.xview()
.yview()
Entry
.xview()
22.2. 将 a 连接到另一个 控件Scrollbar
下面是一个代码片段,显示了画布的创建 带有水平和垂直滚动条。在此 片段,被假定为一个小部件。self
Frame
self.canv = tk.Canvas(self, width=600, height=400,
scrollregion=(0, 0, 1200, 800))
self.canv.grid(row=0, column=0)
self.scrollY = tk.Scrollbar(self, orient=tk.VERTICAL,
command=self.canv.yview)
self.scrollY.grid(row=0, column=1, sticky=tk.N+tk.S)
self.scrollX = tk.Scrollbar(self, orient=tk.HORIZONTAL,
command=self.canv.xview)
self.scrollX.grid(row=1, column=0, sticky=tk.E+tk.W)
self.canv['xscrollcommand'] = self.scrollX.set
self.canv['yscrollcommand'] = self.scrollY.set
笔记:
-
连接是双向的。画布的选项必须连接到 水平滚动条的方法和滚动条的选项必须连接到画布的方法。垂直滚动条和 画布必须具有相同的相互连接。
xscrollcommand
.set
command
.xview
-
.grid() 方法上的选项 对滚动条的调用迫使它们仅拉伸 足以适合相应尺寸 帆布。
sticky