欢迎光临
我们一起进阶

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

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章

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

赞(1) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏