程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python tkinter -- 第11章滾動條

編輯:Python

第11章滾動條
滾動條的作用就是可以讓與之關聯的控件的內容滾動顯示。比如文本控件,對於一個很長的文件,不可能在窗口中完全顯示出來,如果想看到沒有顯示的部分,就需要使用滾動條,讓沒有顯示的內容出現在顯示窗口中。一般情況下,滾動條是和列表框、畫布控件、文本控件、輸入控件等一起使用。滾動條也可以單獨使用。比如顯示放大倍數或者調整數值的時候。

滾動條有兩種:水平滾動條和垂直滾動條。滾動條由以下部分組成:
(1)滑塊
滑塊就是凸起的矩形圖案。可以用鼠標拖動,也可以使用按鈕調整位置。用程序設定位置也可以。滑塊的移動,也代表顯示內容或者相關數值的變化。

(2)箭頭按鈕
滾動條有2個按鈕:arrow1和arrow2。按鈕的圖案一般是箭頭樣式的。水平滾動條位於左右兩端,而垂直滾動條位於上下兩端。功能就是調整顯示內容,實現內容的滾動

(3)滾動槽(trough )
滾動槽是凹形部分。根據滑塊的位置,分為trough1和trough2。用鼠標點擊滾動槽,也可以實現滾動顯示。後面章節會介紹如何實現。

11.1 屬性

屬性描述activebackground當鼠標放上去時,滾動條的背景色activerelief鼠標經過時,滾動條的裝飾效果backgroud
bg按鈕的背景色borderwidth
bd邊框的大小,默認為 2 個像素command關聯的函數,當滾動被點擊時,執行該函數cursor光標的形狀設定,如arrow, circle, cross, plus 等elementborderwidth組成元素的寬度highlightcolor聚焦的高亮顏色highlightbackground聚焦的高亮背景顏色highlightthickness聚焦高亮邊框寬度jump滑塊跳到指定的位置。Orient設置滾動條的方向。可以是VERTICAL或者是HORIZONALrelief邊框樣式,設置控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認為 FLAT。repeatdelay默認值是300repeatinterval默認值是100takefocus表示可以使用Tab鍵移動焦點到該控件。默認值是空字符串。troughcolor滾動槽的背景顏色width定義滾動條的寬度。默認值是1511.1.1 activebackground當鼠標經過滾動條時,滑塊和箭頭按鈕的顏色。不過在我的windows環境下不起作用。11.1.2 activerelief鼠標經過滾動條時,滾動條的裝飾效果。不過在我的windows環境下不起作用。11.1.3 backgroud(bg)滾動條的背景顏色。不過在我的windows環境下不起作用。

11.1.4 borderwidth(bd)
滾動條的邊框。不過在我的windows環境下不起作用。
11.1.5 command
設置回調函數,用來處理滾動事件。該參數的一般對應關聯控件的xview或者yview方法。可以參見第十章Text控件中的說明。
11.1.6 cursor
鼠標經過滾動條時,鼠標的形狀。具體說明見3.3.6節

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,cursor='spider')
b1.pack(side = tk.RIGHT, fill = tk.Y)
root.mainloop()

11.1.7 elementborderwidth
滾動條滑塊和箭頭的邊框。不過在我的windows環境下不起作用
11.1.8 highlightbackground,highlightcolor,highlightthickness
滾動條獲得輸入焦點時的背景顏色、前景顏色和邊框。不過不起作用
11.1.9 jump
jump=False的時候,滑塊的微小變動,就會觸發回調函數。
jump=True的時候,只有當鼠標鍵釋放,才會觸發回調函數。
11.1.10 orient
設置滾動條的方向。有兩種:tk.HORIZONTAL與tk.VERTICAL

11.1.11 relief
設置滾動條的外觀。不過不起作用。
11.1.12 repeatdelay
鼠標左鍵在滾動槽按下並保持多長時間,滑塊開始持續移動。默認時300毫秒。不過不起作用
11.1.13 repeatinterval
鼠標在滾動槽按下並保持,滑塊的移動頻率,就是多長時間滑塊會移動一次。默認時間是100毫秒。不起作用。
11.1.14 takefocus
設置滾動是否可以使用Tab鍵獲得輸入焦點。
11.1.15 troughcolor
設置滾動槽的背景顏色。不起作用。
11.1.16 width
設置滾動條的寬度。這個不是滾動條有多長,而是有多寬。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
root.mainloop()

結果:

11.2 方法

方法描述activate(element)激活滾動條元素。
element包括:”arrow1”,”arrow2”,”slider”。如果沒有輸入element,則返回當前正在激活的元素。如果沒有激活的元素,返回空字符串。config(**options)配置滾動條的屬性。具體的屬性說明見滾動條屬性說明。delta(deltax, deltay)這個函數是處理鼠標拖動情況的。根據鼠標在屏幕的位置,計算出滾動條滑塊需要移動的偏移量,從而達到拖動的目的。
deltax:水平滾動塊增加值.
deltay:垂直滾動塊增加值
返回值:滾動條要增加的偏移值。fraction(x, y)X:鼠標的水平位置
Y:鼠標的垂直位置
返回值:根據鼠標的位置返回的滑動塊偏移量。(0.0-1.0).get()獲得當前滑塊的位置。identify(x, y)確認輸入的屏幕的坐標點,是否在滾動條控件的范圍內。
(x,y):屏幕坐標點
返回值:字符串
“arrow1”:最左上角或者最上方
“arrow2”:最右方後者最下方
“slider”:在滑塊上。
“trough1”:在滑塊的上方或者左方。
“trough2”:在滑塊的下方或者右方
None:不在滾動條控件范圍內。set(lo,hi)將滑塊移動到新的位置。
Lo:相對於上方(最左)的偏移
Hi:相對於最下(最右)的偏移。

11.2.1 activate
激活滾動條的箭頭按鈕和滑塊。合理的輸入值是’arrow1’,’arrow2’和’slider’。如果沒有輸入值,返回當前激活的元素。不過不起作用。

11.2.2 delta(deltax, deltay)
給定一個鼠標移動的范圍 deltax 和 deltay(以像素為單位,deltax 表示水平移動量,deltay 表示垂直移動量),然後該方法返回一個浮點類型的值(范圍 -1.0 ~ 1.0),該返回值表示滑塊需要移動的位置,以保持和鼠標的移動一致。這通常在鼠標綁定上使用,用於確定當用戶拖拽鼠標時滑塊的如何移動。
11.2.3 fraction(x,y)
根據鼠標的位置(x,y),計算出滑塊的對應位置。(x,y)都是以像素為單位的。返回值的范圍是(0.0,1.0)。
11.2.4 get()
獲得滑塊的位置。返回值為(a,b)。a表示距離最左邊或者最上邊的距離(看是水平還是垂直滾動條)。b表示距離最右邊或者最下邊的距離。取值范圍為(0,1)。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,orient=tk.VERTICAL,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
def get():
print(b1.get())
b3=tk.Button(root,text='Get',command=get)
b3.pack()
root.mainloop()

11.2.5 identify(x,y)
判斷屏幕坐標點是否在滾動條的范圍內。如果在滾動條的范圍內,返回這個坐標點的滾動條元素:arrow1,arrow2,slider,trough1,trough2。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scrollbar(root,orient=tk.VERTICAL,width=40)
b1.pack(side = tk.RIGHT, fill = tk.Y)
b2 = tk.Listbox(root, yscrollcommand = b1.set)
for line in range(100):
b2.insert(tk.END, "This is line number " + str(line))
b2.pack( side = tk.LEFT, fill = tk.BOTH )
b1.config( command = b2.yview )
def pos(event):
print(b1.identify(event.x,event.y))
b1.bind( "<Button-1>",pos)
root.mainloop()

11.2.6 set(lo,hi)
將滾動條與其他的控件關聯起來。設置xscrollcommand或者yscrollcommand的值為.set。詳細的用法見11.2.5中的代碼。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved