Tkinter (17) 滾動條部件 Scrollbar

Jason990420發表於2020-08-13

滾動條部件的建立及其選項

滾動條部件中包含滑塊slider, 前後兩個箭頭arrow1, arrow2, 滑塊槽trough (分前後兩頭滑塊槽trough1/trough2), 滑塊的大小及位置代表可見的部份佔全部內容的比例及位置 (0.0 ~ 1.0).

import tkinter as tk
root = tk.Tk()
parent_widget = ...
scroll_bar = tk.Scrollbar(parent_widget, option, ...)
選項 說明
activebackground active 時的背景色
activerelief active 時的滑塊花邊樣式,內定為 RAISED
bg or background 背景色,非 active 時滑塊及箭頭的顏色
bd or borderwidth 滑塊槽框, 滑塊及箭頭框的寛度,內定滑塊槽無框, 滑塊及箭頭框的寛度為 2 點素
command 滑塊位置改變時呼叫的程式
cursor 當滑鼠移到部件時,所顯示的滑鼠圖示
elementborderwidth 滑塊及箭頭框的寛度, 內定為 -1, 使用 bd or borderwidth 的值
highlightbackground 非聚焦時的聚焦顏色
highlightcolor 聚焦時的聚焦顏色
highlightthickness 聚焦厚度,內定 1, 0 則無
jump 是否立刻呼叫 command, 內定為 0, 每一小步都呼叫, 1 則直到釋到滑鼠按鍵才呼叫
orient 水平或垂直滾動​​條, HORIZONTAL/VERTICAL
relief 花邊樣式,內定為 SUNKEN
repeatdelay 直到經過指定時間 (毫秒), 開始重複按下滑塊槽,內定 300ms
repeatinterval 重複間隔,以毫秒為單位重複按下滑塊槽,內定 100ms
takefocus TAB 鍵在部件是否會迴圈焦點,1 則會,內定為空字串,則僅在具有鍵繫結下迴圈焦點
troughcolor 滑塊槽的顏色
width 滾動條部件寛度,內定為 16 點素

滾動條部件的方法

方法 說明
activate(element=None) 返回滑鼠所在零件, ‘slider’/‘arrow1’/‘arrow2’/‘’ (其他), 或者設定聚焦在該零件
delta(dx, dy) 如同滑鼠移動 (dx, dy), 返回目前滑塊相對移動量, 該值在 -1.0 ~ +1.0
fraction(x, y) 返回相對於 (x, y) 位置的滑塊位置, 0.0 ~ +1.0
get() 返回目前滑塊位置的前緣 a 與後緣 b, (a, b), 0.0 ~ +1.0
identify(x, y) 返回 (x, y) 所在的零件, ‘slider’/‘arrow1’/‘arrow2’/‘trough1’/‘trough12’/‘’ (其他)
set(first, last) 要帶有滾動條的主部件, 其 xscrollcommnad/yscrollcommand 設為本方法, 本方法的引數同get方法返回的結果同意義

注: 移動滾動條並不會移動滾動其主部件.

滾動條部件的回撥

  • command(tk.SCROLL, -1, tk.UINTS) 滾動條前移一小單位
  • command(tk.SCROLL, 1, tk.UINTS) 滾動條後移一小單位
  • command(tk.SCROLL, -1, tk.PAGES) 滾動條前移一小頁面
  • command(tk.SCROLL, 1, tk.PAGES) 滾動條後移一小頁面
  • command(tk.MOVETO, f) 滾動條移到相對位置 f: 0.0 ~ +1.0

設定主部件與滾動條部件的連結

  • 主部件的 xscrollcommand/yscrollcommand 為滾動條部件的 set 方法
  • 水平/垂直滾動條部件的 command 為主部件的 xview/yview 方法
  • 水平/垂直滾動條部件的 grid 方法選項 sticky, 應該要設定為 EW/NS.

範例視窗及程式碼

Python

import tkinter as tk

root = tk.Tk()
root.wm_title("Scrollbar Demo")

font = ('Courier New', 16, 'bold')

elements = ('List for House', 'List for Friend', 'List for Cash', 'List for Car',
            'List for Motorcycle', 'List for Boat', 'List for Airplane')

x_scrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
x_scrollbar.grid(row=1, column=0, sticky=tk.E+tk.W)
y_scrollbar = tk.Scrollbar(root, orient=tk.VERTICAL)
y_scrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)

list_box = tk.Listbox(root, font=font, selectmode=tk.MULTIPLE,
    width=15, height=5, activestyle='dotbox', xscrollcommand=x_scrollbar.set,
    yscrollcommand=y_scrollbar.set)
list_box.insert(tk.END, *elements)
list_box.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)

x_scrollbar['command'] = list_box.xview
y_scrollbar['command'] = list_box.yview

root.mainloop()
本作品採用《CC 協議》,轉載必須註明作者和本文連結

Jason Yang

相關文章