第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中的代码。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐