Python的GUI编程(八)Scrollbar(滚动条)

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的消息了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HySmiley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值