Listbox 列表選擇框
Listbox 是 tkinter 裡用來讓使用者可以從一串清單裡選擇的「列表輸入框」,這篇教學會介紹如何在 tkinter 視窗裡加入 Listbox 列表選擇框,並實作輸入資料後進行互動的程式。
快速導覽:
加入 Listbox
Listbox 參數設定
Listbox 操作方法
一次添加多個選項
點擊按鈕,顯示清單選擇項目
Listbox 加入捲軸
因為 Google Colab 不支援 tkinter,所以請
使用本機環境
( 參考:
使用 Python 虛擬環境
) 或
使用 Anaconda Jupyter 進行實作
( 參考:
使用 Anaconda
)。
加入 Listbox
建立 tkinter 視窗物件後,
透過 Listbox 方法,就能在視窗物件中建立 Listbox 列表選擇框
,必要的參數有一個,第一個表示要加入的視窗物件,
建立 Listbox 後使用 insert() 方法加入選項,最後再用 pack() 方法將其加入視窗中
( 參考
pack 參數設定
),下方的程式碼執行後,會在視窗裡加入一個具有三個選項的 Listbox ( 位置、大小和顏色都使用預設值 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
listbox = tk.Listbox(root) # 放入列表選擇框
listbox.insert(1, 'Apple') # 第一個選項
listbox.insert(2, 'Banana') # 第二個選項
listbox.insert(3, 'Orange') # 第三個選項
listbox.pack()
root.mainloop()
insert 的第一個參數為選項的位置,如果不知道位置但又希望選項按照順序插入,可以
使用 tk.END 作為順序,就會將選項依序放在最後,如果使用 0,就會從第一個位置插入
。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
listbox = tk.Listbox(root) # 放入列表選擇框
listbox.insert(tk.END, 'Apple') # 第一個選項
listbox.insert(tk.END, 'Banana') # 第二個選項
listbox.insert(tk.END, 'Orange') # 第三個選項
listbox.pack()
root.mainloop()
selectmode
選取模式,可以設定 browse ( 預設,等同單選 )、single ( 單選 )、multiple ( 多選 ) 和 extended ( 等同多選,但可用滑鼠拖曳選取 )。
selectbackground
選取時的背景色。
xscrollcommand
與 set() 方法搭配,將 Listbox 加上水平捲軸。
yscrollcommand
與 set() 方法搭配,將 Listbox 加上垂直捲軸。
Listbox 操作方法
透過下列方法,可以進行 Listbox 列表選擇框的相關操作:
insert()
index, option
在指定位置 ( index ) 加入選項 ( option )。
delete()
first, last=None
刪除 first 到 last 之間的項目,如果沒有 last 則只會刪除 first 的項目。
get()
first, last=None
取得 first 到 last 之間的項目,如果沒有 last 則只會取得 first 的項目。
size()
回傳項目總數。
curselection()
以 tuple 格式回傳選取的項目索引。
activate()
index
選取 index 項目。
selection_set()
index
設定 index 項目為被選取的狀態。
selection_includes()
index
檢查 index 項目是否有被選取。
listbox = tk.Listbox(root)
menu = ['Apple','Banana','Orange','Grap','Papaya','Coconut'] # 建立選單的串列
for i in menu:
listbox.insert(tk.END, i) # 使用 for 迴圈添加選項
listbox.pack()
root.mainloop()
除了使用迴圈,也可以透過 listvariable 指定變數,當變數內容為清單項目時,就會自動將清單項目加入。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
menu = tk.StringVar() # 設定 tk 文字變數
menu.set(('Apple','Banana','Orange','Grap','Papaya','Coconut')) # 加入清單內容
listbox = tk.Listbox(root, listvariable=menu) # 設定 listvariable=a
listbox.pack()
root.mainloop()
參考「Label 標籤」和「Button 按鈕」文章,搭配 Listbox 的 curselection() 取得選取項目以及 get() 取得項目內容,就能在點擊按鈕時,透過 Label 顯示 Listbox 選取的項目。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
# 定義 Label 顯示選取內容的函式
def show():
n, = listbox.curselection() # 取得項目索引值,因為是單選,回傳 (i,),所以使用 n, 取值
text.set(listbox.get(n)) # 設定文字變數內容為該索引值對應的內容
text = tk.StringVar() # 設定文字變數
label = tk.Label(root, textvariable=text) # 放入 Label
label.pack()
menu = tk.StringVar()
menu.set(('Apple','Banana','Orange','Grap','Papaya','Coconut'))
listbox = tk.Listbox(root, listvariable=menu, height=8)
listbox.pack()
btn = tk.Button(root, text='顯示', command=show) # 放入 Button,設定 command 參數
btn.pack()
Listbox 加入捲軸
Listbox 要加入捲軸比較複雜,需要先添加 Frame 頁框元件,再將 Listbox 和額外添加的 Scrollbar 捲軸元件放在 Frame 頁框裡,接著將 Listbox 和 Scrollbar 綁定,就能實現 Listbox 捲軸效果。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
frame = tk.Frame(root, width=15) # 加入頁框元件,設定寬度
frame.pack()
scrollbar = tk.Scrollbar(frame) # 在頁框中加入捲軸元件
scrollbar.pack(side='right', fill='y') # 設定捲軸的位置以及填滿方式
menu = tk.StringVar()
menu.set(('Apple','Banana','Orange','Grap','Papaya','Coconut','Pear','Nuts'))
# 在頁框中加入 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()
如果有任何建議或問題,可傳送「」給我,謝謝~