Scrollbar 滾動條 ( 捲軸 )
Scrollbar 是 tkinter 裡與其他元件搭配的「滾動條 ( 捲軸 )」,當某個元件的內容高度過長要捲動時,就可綁定 Scrollbar,讓使用者進行捲動瀏覽,這篇教學會介紹如何在 tkinter 視窗裡加入 Scrollbar 滾動條。
快速導覽:
因為 Google Colab 不支援 tkinter,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
視窗加入 Scrollbar 滾動條
建立 tkinter 視窗物件後,透過 Scrollbar 方法,就能在視窗物件或可以捲動的元件中加入 Scrollbar,必要的參數有一個,表示要加入的物件,建立 Scrollbar 滾動條後再使用 pack() 方法將其加入 ( 參考 pack 參數設定 ),下方的程式碼執行後,會在主視窗的右邊加入 Scrollbar。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
scrollbar = tk.Scrollbar(root) # 建立滾動條
scrollbar.pack(side='right', fill='y') # 將滾動條加在右側,垂直填滿
root.mainloop()
Text 多行輸入框加入 Scrollbar 滾動條
如果要將 Text 多行輸入框加入 Scrollbar 滾動條,需要先將 Text 和 Scrollbar 加入一個 Frame,並在這個 Frame 中互相綁定,就能做到滾動條捲動 Text 多行輸入框內容的效果。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
frame = tk.Frame(root, height=10, width=15) # 建立 Frame
scrollbar = tk.Scrollbar(frame) # 將 Frame 裡放入 Scrollbar
scrollbar.pack(side='right', fill='y') # 設定位置在右側,垂直填滿
# 在 Frame 裡放入 text,設定 yscrollcommand=scrollbar.set
text = tk.Text(frame, height=10, width=15, yscrollcommand=scrollbar.set)
text.pack()
scrollbar.config(command=text.yview) # 設定 scrollbar 綁定 text 的 yview
frame.pack()
root.mainloop()
Listbox 列表選擇框加入 Scrollbar 滾動條
Frame 框架預設寬高尺寸和內容的最大寬高相同,而最後呈現在視窗裡的位置,則以 Frame 擺放的順序來決定,以下方的程式碼而言,雖然 Label1 比 Label2 早放入,但因為分別放在不同的 Frame 裡,最後因為 Frame1 比較晚放到視窗裡,呈現的結果就會擺在後方。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
frame = tk.Frame(root, width=15) # 建立 Frame
frame.pack()
scrollbar = tk.Scrollbar(frame) # 將 Frame 裡放入 Scrollbar
scrollbar.pack(side='right', fill='y') # 設定位置在右側,垂直填滿
menu = tk.StringVar()
menu.set(('Apple','Banana','Orange','Grap','Papaya','Coconut','Pear','Nuts'))
# 在 Frame 中加入 Listbox 元件,設定 yscrollcommand=scrollbar.set
listbox = tk.Listbox(frame, listvariable=menu, height=6, width=15, yscrollcommand=scrollbar.set)
listbox.pack(side='left', fill='y') # 設定 Listbox 的位置以及填滿方式
scrollbar.config(command = listbox.yview) # 設定 scrollbar 的 command = listbox.yview
root.mainloop()
Canvas 加入 Scrollbar 滾動條
如果要在 Canvas 裡加入 Scrollbar,必須按照一定的程式撰寫順序,當中 canva.pack() 方法一定要放在最後才會出現滾動條,此外在設定 Canvas 時,也得指定 scrollregion(x1,y1,x2,y2),scrollregion 表示 Canvas 要捲動的大小 ( 類似 Canvas 的實際大小 ),除了 Canvas,還要額外設定 Scrollbar 的 orient 參數,完成後就能替 Canvas 添加 Scrollbar。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('400x400')
frame = tk.Frame(root, width=200, height=300) # 使用 frame 裝載 Canvas
frame.pack()
# 設定 Canvas
canvas = tk.Canvas(frame, width=200, height=300, bg='#fff', scrollregion=(0,0,400,400))
canvas.create_rectangle(120, 10, 170, 100, width=8, fill='#f00') # 在 Canvas 裡畫矩形
scrollX = tk.Scrollbar(frame, orient='horizontal') # 水平捲軸放在 frame 裡
scrollX.pack(side='bottom', fill='x') # 放在下面填滿 x 軸
scrollX.config(command=canvas.xview) # 綁定 Canvas x 方向
scrollY = tk.Scrollbar(frame, orient='vertical') # 垂直捲軸放在 frame 裡
scrollY.pack(side='right', fill='y') # 放在右邊填滿 y 軸
scrollY.config(command=canvas.yview) # 綁定 Canvas y 方向
canvas.config(xscrollcommand=scrollX.set, yscrollcommand=scrollY.set) # Canvas 綁定捲軸
canvas.pack(side='left') # Canvas 放在 frame 中的左側
root.mainloop()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~