tkinter 8 scrollbar
Reference
- http://effbot.org/tkinterbook/scrollbar.htm
- http://bbs.fishc.com/thread-59493-1-1.html
简介
Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox, Text, Canva, Entry, SpinBox)结合使用。该组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条。
使用方法:使用滚动条的方法(垂直滚动条为例), 包括两个步骤:
- 设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法;
- 设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法。
属性和方法
属性
- orient, 指定绘制垂直滚动条(HORIZONTAL), 还是水平滚动条(VERTICAL),默认是VERTICAL
- command, 设置当滚动条更新时回调的函数, 用于指定对应组件的 xview() 或 yview() 方法
- jump, 指定当用户拖拽滚动条时的行为。默认值是 False,滚动条的任何一丝变动都会即刻调用 command 选项指定的回调函数。设置为 True 则当用户松开鼠标才调用
- takefocus, 指定使用 Tab 键可以将焦点移到该 Scrollbar 组件上, 默认是开启的
- width, 指定滚动条的宽度,默认值是 16 像素
- troughcolor, 指定凹槽的颜色
- elementborderwidth, 指定滚动条和箭头的边框宽度。默认值是 -1,表示使用 borderwidth 选项的值
- relief, 指定边框样式 2. 默认值是 SUNKEN 3. 可以选择 FLAT, RAISED,GROOVE,RIDGE
- activerelief, 指定当鼠标在上方飘过时滑块的样式,可以是RAISED(默认), FLAT,SUNKEN,GROOVE,RIDGE
- activebackground, 指定当鼠标在上方飘过的时候滑块和箭头的背景颜色
- background, bd, bg, borderwidth, 背景色和边框宽度
- cursor, 指定当鼠标在上方飘过的时候的鼠标样式
- highlightbackground,highlightcolor, highlightthickness, 插件没有获取/获取焦点时的样式,和边框宽度
- repeatdelay, repeatinterval 指定鼠标左键点击滚动条凹槽的响应时间 和 响应间隔
方法
- set(*args)
- 设置当前滚动条的位置
- 如果设置则需要两个参数 (first, last),first 表示当前滑块的顶端或左端的位置,last 表示当前滑块的底端或右端的位置(范围 0.0 ~ 1.0)
- get()
- 返回当前滑块的位置 (a, b)
- a 值表示当前滑块的顶端或左端的位置,b 值表示当前滑块的底端或右端的位置(范围 0.0 ~ 1.0)
- identify(x, y)
- 返回一个字符串表示指定位置下(如果有的话)的滚动条部件
- 返回值可以是:”arrow1”(箭头1),”arrow2”(箭头2)、”slider”(滑块)或 ““(啥都没有)
- fraction(x, y)
- 给定一个像素坐标 (x, y),该方法返回最接近给定坐标的滚动条位置(范围 0.0 ~ 1.0)
- activate(element)
- 显示 element 参数指定的元素的背景颜色和样式
- element 参数可以设置为:”arrow1”(箭头1),”arrow2”(箭头2)或 “slider”(滑块)
- delta(deltax, deltay)
- 给定一个鼠标移动的范围 deltax 和 deltay(像素为单位,deltax 表示水平移动量,deltay 表示垂直移动量),然后该方法返回一个浮点类型的值(范围 -1.0 ~ 1.0)
- 这通常在鼠标绑定上使用,用于确定当用户拖拽鼠标时滑块的如何移动
实例
def test1(master=None):
frm1 = Frame(master)
frm1.pack(fill=X, side=TOP)
frm2 = Frame(master, height=50, bg='grey')
frm2.pack(fill=X, side=TOP)
# scrollbar + text
Label(frm1, text="Text with Scrollbar", bg='red', fg='white').pack(fill=X, side=TOP)
tx = Text(frm1, height=5, width=30)
tx.pack(fill=X, side=LEFT)
sb = Scrollbar(frm1,
orient=VERTICAL,
)
sb.pack(fill=Y, side=LEFT)
# bind them
tx.config(yscrollcommand=sb.set)
sb['command'] = tx.yview
# scrollbar + listbox
Label(frm2, text="Listbox with Scrollbar", bg='blue', fg='white').pack(fill=X, side=TOP)
lbx_var = StringVar()
lbx_var.set("Python C C++ C# Java Javascript HTML CSS Ruby Perl Assembly Lua")
lbx = Listbox(frm2, listvariable=lbx_var,
selectmode=MULTIPLE,
height=5,
width=30
)
lbx.pack(fill=X, side='left')
lbx.see(5)
sb2 = Scrollbar(frm2, orient=VERTICAL)
sb2.pack(fill=Y, side=LEFT)
sb2.set(0.5, 1)
# bind them
lbx.config(yscrollcommand=sb2.set)
sb2.config(command=lbx.yview)