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的setlb['yscrollcommand'] = sl.setfor i in range(100): lb.insert(END,str(i))#side指定Listbox為居左lb.pack(side = LEFT)#下面的這句是關鍵:指定Scrollbar的command的回呼函數是Listbar的yviewsl['command'] = lb.yviewroot.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.yviewroot.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.setfor i in range(100): lb.insert(END,str(i))#使用索引為50的元素可見lb.see(50)lb.pack(side = LEFT)sl['command'] = lb.yviewroot.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的setlb['yscrollcommand'] = sl.setfor 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.yviewroot.mainloop()
運行程式,Scrollbar的slider已經到了50位置,也就是說Scrollbar響應了Listbox視圖改變的訊息,調用 了自己的set函數。
進行操作:拖動slder或點擊up / down 按鈕,Listbox的視圖沒有任何反應,即Listbox不會響應Scrollbar的訊息了。