Tkinter教程之Scrollbar篇

來源:互聯網
上載者:User
'''Tkinter教程之Scrollbar篇'''
#Scrollbar(捲軸),可以單獨使用,但最多的還是與其它控制項(Listbox,Text,Canva等)結合使用
'''1建立一個Scrollbar'''
from Tkinter import *
root = Tk()
Scrollbar(root).pack()
root.mainloop()
#顯示了一個Scrollbar,但什麼也做不了,無法拖動slider。
from Tkinter import *
root = Tk()
sl = Scrollbar(root)
sl.set(0.5,0)
sl.pack()
root.mainloop()
'''2.通過set方法來設定slider的位置'''
#使用水平捲軸,通過set將值設定為(0.5,1),即slider占整個Srollbar的一半
from Tkinter import *
root = Tk()
sl = Scrollbar(root,orient = HORIZONTAL)
sl.set(0.5,1)
sl.pack()
root.mainloop()
'''3.使用回呼函數(不建議這樣使用)'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
def scrollCall(moveto,pos):
    #如何得到兩個參數:使用如下列印中的資訊,可以看到解譯器傳給scrollCall函數的兩個參數,一個為
    #moveto,參考手冊可以得知,它是當拖動slider時調用的函數;另一個參數為slider的當前位置,我們
    #可以通過set函數來設定slider的位置,因此使用這個pos就可以完成控制slider的位置。
    #print moveto,pos
    sl.set(pos,0)
    print sl.get()
sl = Scrollbar(root,orient = HORIZONTAL,command = scrollCall)
sl.pack()
root.mainloop()
#這樣還有一個嚴重問題,只能對其進行拖動。對兩個按鈕及pagedwon/pageup的響應,由於up按鈕響應的為三個參數,故會出
#現異常。這個例子只是用來說明command屬性是可用的,如果喜歡自己可以處理所有的訊息,將scrollCall是否可以改為變參數函數?
#對於不同的輸入分別進行不同的處理。

'''4.單獨使用還是比較少見,大部分應用還是與其它控制項的綁定,以下是將一個Listbox與Scrollbar綁定的例子'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
lb = Listbox(root)
sl = Scrollbar(root)
sl.pack(side = RIGHT,fill = Y)
#side指定Scrollbar為居右;fill指定填充滿整個剩餘地區,到WM在時候再詳細介紹這幾個屬性。
#下面的這句是關鍵:指定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()
'''5.這樣理解二者之間的關係:當Listbox改變時,Scrollbar調用set以改變slder的位置;當Scrollbar改變了slider的位置時,Listbox調用yview以顯示新的list項,為了示範這兩種關係先將yscrollcommad與scrollbar的set解除綁定,看看會有什麼效果'''
# -*- coding: cp936 -*-
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的視圖。

'''6.再測試一下,解除Scrollbar的command與Listbox的yview的關係,測試代碼如下:'''
# -*- coding: cp936 -*-
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的訊息了。

#author:     jcodeer
#blog:    jcodeer.cublog.cn
#email:    jcodeer@126.com

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.