Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva等)结合使用
滑动条的初始位置设置:set()方法
def set(self, *args): """Set the fractional values of the slider position (upper and lower ends as value between 0 and 1).""" self.tk.call((self._w, 'set') + args)
设置的值在0---1间
from Tkinter import *
root=Tk()
root.geometry('200x100')
S1=Scrollbar(root,orient=HORIZONTAL)
S1.set(0.6,0)
S1.pack()
root.mainloop()
Listbox与Scrollbar绑定
from Tkinter import *
root = Tk()
lb = Listbox(root)
sl = Scrollbar(root)
sl.pack(side = RIGHT,fill = Y)
#side指定Scrollbar为居右;fill指定填充满整个剩余区域。
#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set
lb['yscrollcommand'] = sl.set
for i in range(100):
lb.insert(END,str(i))
#side指定Listbox为居左
lb.pack(side = LEFT)
#下面的这句是关键:指定Scrollbar的command的回调函数是Listbar的yview
sl['command'] = lb.yview
root.mainloop()
Listbox属性及方法
xscrollcommand 属性:
如果你想让用户水平滚动列表框,你可以链接你的listbox widg et到一个水平滚动条。
yscrollcommand属性:
如果你想让用户垂直滚动列表框,你可以链接你的listbox widg et到垂直滚动条。
yview():将列表框垂直滚动,将相关的垂直滚动条的命令选项设置为该方法。
from Tkinter import *
root=Tk()
lb=Listbox(root)
# 水平方向滚动
S1=Scrollbar(root,orient=HORIZONTAL)
S1.pack(side=BOTTOM,fill=X)
lb['xscrollcommand']=S1.get()
for i in range(100):
lb.insert(END,i)
lb.pack(side=TOP)
S1['command']=lb.yview
root.mainloop()
程序有点问题!
当Listbox改变时,Scrollbar调用set以改变slder的位置;当Scrollbar改变了slider的位置时,Listbox调用yview以显示新的list项,为了演示这两种关系先将yscrollcommad与scrollbar的set解除绑定。
from Tkinter import *
root = Tk()
lb = Listbox(root)
sl = Scrollbar(root)
sl.pack(side = RIGHT,fill = Y)
#解除Listbox的yscrollcommand与Scrollbar的set绑定
#lb['yscrollcommand'] = sl.set
for i in range(100):
lb.insert(END,str(i))
#使用索引为50的元素可见
lb.see(50)
lb.pack(side = LEFT)
sl['command'] = lb.yview
root.mainloop()
运行结果,Listbox显示了50项,即Listbox的视图已经到50了,但Scrollbar的slider仍旧位于0处。也就是说Scroolbar没有收到set的命令。即说明解除此绑定,Scrollbar将不再响应Listbox视图改变的消息。但仍可以使用Scrollbar的slider来移动Listbox的视图。
解除Scrollbar的command与Listbox的yview的关系
from Tkinter import *
root = Tk()
lb = Listbox(root)
sl = Scrollbar(root)
sl.pack(side = RIGHT,fill = Y)
#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set
lb['yscrollcommand'] = sl.set
for i in range(100):
lb.insert(END,str(i*100))
#使用索引为50的元素可见
lb.see(50)
lb.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的消息了。