Python的GUI編程(八)Scrollbar(捲軸)

來源:互聯網
上載者:User

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


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.