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

  • Post author:
  • Post category:python



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



版权声明:本文为m0_37264397原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。