十二、Tkinter的Scrollbar滚动条控件

Scrollbar 控件常用于创建一个水平或者垂直的滚动条,通常情况下,Scrollbar 控件可以与 Listbox、Text、Canvas、Entry 等控件一起使用。

滚动条控件是图形程序中经常使用的一种控件类型,它主要用来控制控件区域的可见范围

下面列出了 Scrollbar 中常用的属性:

名称

说明

activebackground

指定当鼠标在上方飘过的时候滑块和箭头的背景颜色,默认由系统决定

activerelief

指定当鼠标在滑块上方飘过时滑块的样式,默认值是 “raised”,其他可选值有 “flat”,“sunken”,“groove”,“ridge”

background(bg)

指定背景颜色,默认值由系统指定

borderwidth(bd)

指定边框宽度,默认值是 0

command

当滚动条更新时回调的函数,通常指定对应组件的 xview() 或 yview() 方法

cursor

指定当鼠标在上方飘过的时的鼠标样式,默认值由系统指定

elementborderwidth

1. 指定滚动条和箭头的边框宽度 2. 默认值是 -1(表示使用 borderwidth 选项的值)

jump

1. 指定当用户拖拽滚动条时的行为 2. 默认值为 False,滚动条的任何一丝变动都会即刻调用 command 指定的回调函数 3. 设置为 True 则当用户松开鼠标才调用

orient

指定绘制 “horizontal”(垂直滚动条)还是 “vertical”(水平滚动条),默认值是 VERTICAL

repeatdelay

该选项指定鼠标左键点击滚动条凹槽的响应时间,默认值是 300(毫秒)

repeatinterval

该选项指定鼠标左键紧按滚动条凹槽时的响应间隔,默认值是 100(毫秒)

takefocus

指定使用 Tab 键可以将焦点移到该 Scrollbar 组件上,默认为开启,可以将该选项设置为 False 避免焦点在此组件上

troughcolor

指定凹槽的颜色,默认由系统指定

width

指定滚动条的宽度,默认值是 16px

下面列出了 Scrollbar 中常用的方法:

名称

说明

activate(element)

1. 显示 element 参数指定的元素的背景颜色和样式; 2. element 参数可以设置为:“arrow1”(箭头1),“arrow2”(箭头2)或 “slider”(滑块)

delta(deltax, deltay)

1. 给定一个鼠标移动的范围 deltax 和 deltay,然后该方法返回一个浮点类型的值(范围 -1.0 ~ 1.0) 2. 注意:deltax 表示水平移动量,deltay 表示垂直移动量

fraction(x, y)

给定一个像素坐标 (x, y),该方法返回最接近给定坐标的滚动条位置。

get()

返回当前滑块的位置 (a, b),其中 a 值表示当前滑块的顶端或左端的位置,b 值表示当前滑块的底端或右端的位置。

identify(x, y)

1. 返回一个字符串表示指定位置下(如果有的话)的滚动条部件, 2. 返回值可以是:“arrow1”(箭头1),“arrow2”(箭头2)、“slider”(滑块)或 “”(空)

set(*args)

1. 设置当前滚动条的位置 2. 该方法有两个参数即 (first, last),其中 first 表示当前滑块的顶端或左端的位置,last 表示当前滑块的底端或右端的位置(范围 0.0 ~ 1.0)

from tkinter import (
    Tk, LEFT, BOTH, Scrollbar,
    Listbox, RIGHT, END, BOTTOM,
    HORIZONTAL, X, Y)

win = Tk()
win.title("Python自学网")
win.config(bg="green")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')

# 创建一个滚动条控件,默认为垂直方向
sbar1 = Scrollbar(win)
# 将滚动条放置在右侧,并设置当窗口大小改变时滚动条会沿着垂直方向延展
sbar1.pack(side=RIGHT, fill=Y)
# 创建水平滚动条,默认为水平方向,当拖动窗口时会沿着X轴方向填充
sbar2 = Scrollbar(win, orient=HORIZONTAL)
sbar2.pack(side=BOTTOM, fill=X)
# 创建列表框控件,并添加两个滚动条(分别在垂直和水平方向),使用 set() 进行设置
mylist = Listbox(win, xscrollcommand=sbar2.set, yscrollcommand=sbar1.set)
for i in range(30):
    mylist.insert(END, '第' + str(i + 1) + '次:' + 'Python自学网,网址为:python.net' + '\n')
# 当窗口改变大小时会在X与Y方向填满窗口
mylist.pack(side=LEFT, fill=BOTH)
# 使用 command 关联控件的 yview、xview方法
sbar1.config(command=mylist.yview)
sbar2.config(command=mylist.xview)
#  显示主窗口
win.mainloop()