Listbox:列表框
Scrollbar: 滚动条
Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva等)结合使用
滑动条的初始位置设置:set()方法
orient:设置滚动条水平(HORIZONTAL)还是竖直显示,默认是竖直
EG1:在Text组件中创建水平,竖直的滚动条
EG2:
# Listbox与Scrollbar绑定
from tkinter import *
root = Tk()
root.geometry('200x100')
scrollbar1 = Scrollbar(root)
scrollbar1.pack(side=RIGHT, fill=Y)
listbox1 = Listbox(root)
# 指定Listbox的yscrollbar的回调函数为Scrollbar的set
listbox1["yscrollcommand"] = scrollbar1.set
listbox1.pack(side=LEFT)
# 指定Scrollbar的command的回调函数是Listbar的yview
scrollbar1["command"] = listbox1.yview
for i in range(40):
listbox1.insert(END, str(i))
root.mainloop()
补充:1. yscrollcommand属性:如果你想让用户垂直滚动列表框,你可以链接你的listbox widg et到垂直滚动条。
2. 将列表框垂直滚动,将相关的垂直滚动条的命令选项设置为该方法。
EG3:
yscrollcommad与scrollbar的set解除绑定。
from tkinter import *
root = Tk()
listbox1 = Listbox(root)
scrollbar1 = Scrollbar(root)
scrollbar1.pack(side=RIGHT, fill=Y)
# 解除Listbox的yscrollcommand与Scrollbar的set绑定
# lb['yscrollcommand'] = sl.set
for i in range(100):
listbox1.insert(END, str(i))
# 使用索引为50的元素可见
listbox1.see(50)
listbox1.pack(side=LEFT)
scrollbar1['command'] = listbox1.yview
root.mainloop()
实行结果:运行结果,Listbox显示了50项,即Listbox的视图已经到50了,但Scrollbar的slider仍旧位于0处。也就是说Scroolbar没有收到set的命令。即说明解除此绑定,Scrollbar将不再响应Listbox视图改变的消息。但仍可以使用Scrollbar的slider来移动Listbox的视图。
EG4:
解除Scrollbar的command与Listbox的yview的关系
from tkinter import *
root = Tk()
listbox1 = Listbox(root)
scrollbar = Scrollbar(root)
scrollbar.pack(side = RIGHT,fill = Y)
#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set
listbox1['yscrollcommand'] = scrollbar.set
for i in range(100):
listbox1.insert(END,str(i*100))
#使用索引为50的元素可见
listbox1.see(50)
listbox1.pack(side = LEFT)
#解除Scrollbar的command与Listbox的yview的关系
#sl['command'] = lb.yview
root.mainloop()
实行结果:
运行程序,Scrollbar的slider已经到了50位置,也就是说Scrollbar响应了Listbox视图改变的消息,调用 了自己的set函数。
进行操作:拖动slder或点击up/down按钮,Listbox的视图没有任何反应,即Listbox不会响应Scrollbar的消息了。