第11章滚动条
滚动条的作用就是可以让与之关联的控件的内容滚动显示。比如文本控件,对于一个很长的文件,不可能在窗口中完全显示出来,如果想看到没有显示的部分,就需要使用滚动条,让没有显示的内容出现在显示窗口中。一般情况下,滚动条是和列表框、画布控件、文本控件、输入控件等一起使用。滚动条也可以单独使用。比如显示放大倍数或者调整数值的时候。
滚动条有两种:水平滚动条和垂直滚动条。滚动条由以下部分组成:
(1)滑块
滑块就是凸起的矩形图案。可以用鼠标拖动,也可以使用按钮调整位置。用程序设定位置也可以。滑块的移动,也代表显示内容或者相关数值的变化。
(2)箭头按钮
滚动条有2个按钮:arrow1和arrow2。按钮的图案一般是箭头样式的。水平滚动条位于左右两端,而垂直滚动条位于上下两端。功能就是调整显示内容,实现内容的滚动
(3)滚动槽(trough )
滚动槽是凹形部分。根据滑块的位置,分为trough1和trough2。用鼠标点击滚动槽,也可以实现滚动显示。后面章节会介绍如何实现。
11.1 属性
属性 | 描述 |
---|---|
activebackground | 当鼠标放上去时,滚动条的背景色 |
activerelief | 鼠标经过时,滚动条的装饰效果 |
backgroud bg | 按钮的背景色 |
borderwidth bd | 边框的大小,默认为 2 个像素 |
command | 关联的函数,当滚动被点击时,执行该函数 |
cursor | 光标的形状设定,如arrow, circle, cross, plus 等 |
elementborderwidth | 组成元素的宽度 |
highlightcolor | 聚焦的高亮颜色 |
highlightbackground | 聚焦的高亮背景颜色 |
highlightthickness | 聚焦高亮边框宽度 |
jump | 滑块跳到指定的位置。 |
Orient | 设置滚动条的方向。可以是VERTICAL或者是HORIZONAL |
relief | 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。 |
repeatdelay | 默认值是300 |
repeatinterval | 默认值是100 |
takefocus | 表示可以使用Tab键移动焦点到该控件。默认值是空字符串。 |
troughcolor | 滚动槽的背景颜色 |
width | 定义滚动条的宽度。默认值是15 |
11.1.1 activebackground | |
当鼠标经过滚动条时,滑块和箭头按钮的颜色。不过在我的windows环境下不起作用。 | |
11.1.2 activerelief | |
鼠标经过滚动条时,滚动条的装饰效果。不过在我的windows环境下不起作用。 | |
11.1.3 backgroud(bg) | |
滚动条的背景颜色。不过在我的windows环境下不起作用。 |
11.1.4 borderwidth(bd)
滚动条的边框。不过在我的windows环境下不起作用。
11.1.5 command
设置回调函数,用来处理滚动事件。该参数的一般对应关联控件的xview或者yview方法。可以参见第十章Text控件中的说明。
11.1.6 cursor
鼠标经过滚动条时,鼠标的形状。具体说明见3.3.6节
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,cursor='spider')
b1.pack(side = tk.RIGHT, fill = tk.Y)
root.mainloop()
11.1.7 elementborderwidth
滚动条滑块和箭头的边框。不过在我的windows环境下不起作用
11.1.8 highlightbackground,highlightcolor,highlightthickness
滚动条获得输入焦点时的背景颜色、前景颜色和边框。不过不起作用
11.1.9 jump
jump=False的时候,滑块的微小变动,就会触发回调函数。
jump=True的时候,只有当鼠标键释放,才会触发回调函数。
11.1.10 orient
设置滚动条的方向。有两种:tk.HORIZONTAL与tk.VERTICAL
11.1.11 relief
设置滚动条的外观。不过不起作用。
11.1.12 repeatdelay
鼠标左键在滚动槽按下并保持多长时间,滑块开始持续移动。默认时300毫秒。不过不起作用
11.1.13 repeatinterval
鼠标在滚动槽按下并保持,滑块的移动频率,就是多长时间滑块会移动一次。默认时间是100毫秒。不起作用。
11.1.14 takefocus
设置滚动是否可以使用Tab键获得输入焦点。
11.1.15 troughcolor
设置滚动槽的背景颜色。不起作用。
11.1.16 width
设置滚动条的宽度。这个不是滚动条有多长,而是有多宽。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
root.mainloop()
结果:
11.2 方法
方法 | 描述 |
---|---|
activate(element) | 激活滚动条元素。 element包括:”arrow1”,”arrow2”,”slider”。如果没有输入element,则返回当前正在激活的元素。如果没有激活的元素,返回空字符串。 |
config(**options) | 配置滚动条的属性。具体的属性说明见滚动条属性说明。 |
delta(deltax, deltay) | 这个函数是处理鼠标拖动情况的。根据鼠标在屏幕的位置,计算出滚动条滑块需要移动的偏移量,从而达到拖动的目的。 deltax:水平滚动块增加值. deltay:垂直滚动块增加值 返回值:滚动条要增加的偏移值。 |
fraction(x, y) | X:鼠标的水平位置 Y:鼠标的垂直位置 返回值:根据鼠标的位置返回的滑动块偏移量。(0.0-1.0). |
get() | 获得当前滑块的位置。 |
identify(x, y) | 确认输入的屏幕的坐标点,是否在滚动条控件的范围内。 (x,y):屏幕坐标点 返回值:字符串 “arrow1”:最左上角或者最上方 “arrow2”:最右方后者最下方 “slider”:在滑块上。 “trough1”:在滑块的上方或者左方。 “trough2”:在滑块的下方或者右方 None:不在滚动条控件范围内。 |
set(lo,hi) | 将滑块移动到新的位置。 Lo:相对于上方(最左)的偏移 Hi:相对于最下(最右)的偏移。 |
11.2.1 activate
激活滚动条的箭头按钮和滑块。合理的输入值是’arrow1’,’arrow2’和’slider’。如果没有输入值,返回当前激活的元素。不过不起作用。
11.2.2 delta(deltax, deltay)
给定一个鼠标移动的范围 deltax 和 deltay(以像素为单位,deltax 表示水平移动量,deltay 表示垂直移动量),然后该方法返回一个浮点类型的值(范围 -1.0 ~ 1.0),该返回值表示滑块需要移动的位置,以保持和鼠标的移动一致。这通常在鼠标绑定上使用,用于确定当用户拖拽鼠标时滑块的如何移动。
11.2.3 fraction(x,y)
根据鼠标的位置(x,y),计算出滑块的对应位置。(x,y)都是以像素为单位的。返回值的范围是(0.0,1.0)。
11.2.4 get()
获得滑块的位置。返回值为(a,b)。a表示距离最左边或者最上边的距离(看是水平还是垂直滚动条)。b表示距离最右边或者最下边的距离。取值范围为(0,1)。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,orient=tk.VERTICAL,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
def get():
print(b1.get())
b3=tk.Button(root,text='Get',command=get)
b3.pack()
root.mainloop()
11.2.5 identify(x,y)
判断屏幕坐标点是否在滚动条的范围内。如果在滚动条的范围内,返回这个坐标点的滚动条元素:arrow1,arrow2,slider,trough1,trough2。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,orient=tk.VERTICAL,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
def pos(event):
print(b1.identify(event.x,event.y))
b1.bind( "<Button-1>",pos)
root.mainloop()
11.2.6 set(lo,hi)
将滚动条与其他的控件关联起来。设置xscrollcommand或者yscrollcommand的值为.set。详细的用法见11.2.5中的代码。