Python中Tkinter組件Listbox的具體使用

Listbox(列表框)組件用於顯示一個選擇列表。Listbox 隻能包含文本項目,並且所有的項目都需要使用相同的字體和顏色。根據組件的配置,用戶可以從列表中選擇一個或多個選項。

何時使用 Listbox 組件?

Listbox 組件通常被用於顯示一組文本選項,Listbox 組件跟 Checkbutton 和 Radiobutton 組件類似,不過 Listbox 是以列表的形式來提供選項的(後兩個是通過按鈕的形式)。

用法

當你創建一個 Listbox 組件的時候,它是空的,所以第一件要做的事就是添加一行或多行文本進去。我們使用 insert() 方法添加文本,該方法有兩個參數:第一個參數是插入的索引號,第二個參數是插入的字符串。索引號通常是項目的序號(0 是列表中第一項的序號)。

不過你也可以使用一些特殊的索引號:比如 ACTIVE 表示選中的項目(如果 Listbox 允許多選,那麼它表示最後一個被選中的項目);又如 END 表示 Listbox 的最後一行,所以當要插入一個項目到列表時可以使用 END:

import tkinter as tk
 
master = tk.Tk()
 
# 創建一個空列表
theLB = tk.Listbox(master)
theLB.pack()
 
# 往列表裡添加數據
for item in ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]:
        theLB.insert("end", item)
 
 
master.mainloop()

使用 delete() 方法刪除列表中的項目,最常用的操作是刪除列表中的所有項目(更新列表時你需要做的事兒):

listbox.delete(0, "end")
listbox.insert("end", newitem) #插入新的項目

當然你也可以刪除指定的項目,下邊例子使用一個獨立按鈕來刪除 ACTIVE 狀態的項目:

import tkinter as tk
 
master = tk.Tk()
 
# 創建一個空列表
theLB = tk.Listbox(master)
theLB.pack()
 
# 往列表裡添加數據
for item in ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]:
        theLB.insert("end", item)
        
theButton = tk.Button(master, text="刪除", command=lambda x=theLB: x.delete("active"))
theButton.pack()
 
master.mainloop()

     

Listbox 組件根據 selectmode 選項提供瞭四種不同的選擇模式:"single"(單選)、"browse"(也是單選,但拖動鼠標或通過方向鍵可以直接改變選項)、"multiple"(多選)和 "extended"(也是多選,但需要同時按住 Shift 鍵或 Ctrl 鍵或拖拽鼠標實現)。默認是 "browse"。

參數

Listbox(master=None, **options) (class)

master — 父組件

**options — 組件選項,下方表格詳細列舉瞭各個選項的具體含義和用法:

選項 含義
background 1. 設置背景顏色
2. 默認值由系統指定
bg 跟 background 一樣
borderwidth 1. 指定 Listbox 的邊框寬度
2. 默認值由系統指定,通常是 2 像素
bd 跟 borderwidth 一樣
cursor 1. 指定當鼠標在 Listbox 上飄過的時候的鼠標樣式
2. 默認值由系統指定
exportselection 1. 指定選中的項目文本是否可以被復制到剪貼板
2. 默認值是 True
3. 可以修改為 False 表示不允許復制項目文本
font 1. 指定 Listbox 中文本的字體
2. 默認值由系統指定
foreground 1. 設置 Listbox 的文本顏色
2. 默認值由系統指定
fg 跟 foreground 一樣
height 1. 設置 Listbox 顯示的行數(不是像素)
2. 默認值是 10
highlightbackground 1. 指定當 Listbox 沒有獲得焦點的時候高亮邊框的顏色
2. 默認值由系統指定,通常是標準背景顏色
highlightcolor 1. 指定當 Listbox 獲得焦點的時候高亮邊框的顏色
2. 默認值由系統指定
highlightthickness 1. 指定高亮邊框的寬度
2. 默認值是 1
listvariable 1. 指向一個 StringVar 類型的變量,該變量存放 Listbox 中所有的項目
2. 在 StringVar 類型的變量中,用空格分隔每個項目,例如 var.set("雞蛋 鴨蛋 鵝蛋 李狗蛋")
relief 1. 指定邊框樣式
2. 默認值是 "sunken"
selectbackground 1. 指定當某個項目被選中的時候背景顏色
2. 默認值由系統指定
selectborderwidth 1. 指定當某個項目被選中的時候邊框的寬度
2. 默認是由 selectbackground 指定的顏色填充,沒有邊框
3. 如果設置瞭此選項,Listbox 的每一項會相應變大,被選中項為 "raised" 樣式
selectforeground 1. 指定當某個項目被選中的時候文本顏色
2. 默認值由系統指定
selectmode 1. 決定選擇的模式
2. 四種不同的選擇模式:"single"(單選)、"browse"(也是單選,但拖動鼠標或通過方向鍵可以直接改變選項)、"multiple"(多選)和 "extended"(也是多選,但需要同時按住 Shift 鍵或 Ctrl 鍵或拖拽鼠標實現)
3. 默認是 "browse"
setgrid 1. 指定一個佈爾類型的值,決定是否啟用網格控制
2. 默認值是 False
takefocus 1. 指定該組件是否接受輸入焦點(用戶可以通過 tab 鍵將焦點轉移上來)
2. 默認值是 True
width 1. 設置 Listbox 的寬度(單位是文本單元)
2. 文本單元是英文字母的平均寬度(所以如果該選項設置為 2,那麼是無法容納"ww"這兩個寬度大於平均寬度的字母的)
3. 默認值是 20
xscrollcommand 1. 為 Listbox 組件添加一條水平滾動條
2. 將此選項與 Scrollbar 組件相關聯即可
yscrollcommand 1. 為 Listbox 組件添加一條垂直滾動條
2. 將此選項與 Scrollbar 組件相關聯即可

方法

activate(index)
— 將給定索引號對應的選項激活(在其文本下方畫一條下劃線)

bbox(index)
— 返回給定索引號對應的選項的邊框
— 返回值是一個以像素為單位的 4 元祖表示邊框:(xoffset, yoffset, width, height)
— xoffset 和 yoffset 表示距離左上角的偏移位置
— 返回的 width 是文本的實際寬度(像素為單位)
— 如果指向的選項是不可見的,那麼返回值是 None

curselection()
— 返回一個元組,包含被選中的選項的序號(從 0 開始)
— 如果沒有選中任何選項,返回一個空元組

delete(first, last=None)
— 刪除參數 first 到 last 范圍內(包含 first 和 last)的所有選項
— 如果忽略 last 參數,表示刪除 first 參數指定的選項

get(first, last=None)
— 返回一個元組,包含參數 first 到 last 范圍內(包含 first 和 last)的所有選項的文本
— 如果忽略 last 參數,表示返回 first 參數指定的選項的文本

index(index)
— 返回與 index 參數相應的選項的序號(例如 lb.index("end"))

insert(index, *elements)
— 添加一個或多個項目到 Listbox 中
— 使用 lb.insert("end") 添加新選項到末尾

itemcget(index, option)
— 獲得 index 參數指定的項目對應的選項(由 option 參數指定)

itemconfig(index, **options)
— 設置 index 參數指定的項目對應的選項(由可變參數 **option 指定)

nearest(y)
— 返回與給定參數 y 在垂直坐標上最接近的項目的序號

scan_dragto(x, y)
— 見下方 scan_mark(x, y)

scan_mark(x, y)
— 使用這種方式來實現 Listbox 內容的滾動
— 需要將鼠標按鈕事件及當前鼠標位置綁定到 scan_mark(x, y) 方法,然後再將 <motion> 事件及當前鼠標位置綁定到 scan_dragto(x, y) 方法,就可以實現 Listbox 在當前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之間滾動

see(index)
— 調整列表框的位置,使得 index 參數指定的選項是可見的

select_anchor(index)
— 與 selection_anchor(index) 相同,見下方解釋

select_clear(first, last=None)
— 與 selection_clear(first, last=None) 相同,見下方解釋

select_includes(index)
— 與 selection_includes(index) 相同,見下方解釋

select_set(first, last=None)
— 與 selection_set(first, last=None) 相同,見下方解釋

selection_anchor(index)
— 在 index 參數的位置下一個錨點,此後你就可以通過特殊索引 "anchor" 訪問

selection_clear(first, last=None)
— 取消參數 first 到 last 范圍內(包含 first 和 last)選項的選中狀態
— 如果忽略 last 參數,則隻取消 first 參數指定選項的選中狀態

selection_includes(index)
— 返回 index 參數指定的選項的選中狀態
— 返回 1 表示選中,返回 0 表示未選中

selection_set(first, last=None)
— 設置參數 first 到 last 范圍內(包含 first 和 last)選項為選中狀態
— 如果忽略 last 參數,則隻設置 first 參數指定選項為選中狀態

size()
— 返回 Listbox 組件中選項的數量

xview(*args)
— 該方法用於在水平方向上滾動 Listbox 組件的內容,一般通過綁定 Scollbar 組件的 command 選項來實現(具體操作參考:Scrollbar)
— 如果第一個參數是 "moveto",則第二個參數表示滾動到指定的位置:0.0 表示最左端,1.0 表示最右端
–如果第一個參數是 "scroll",則第二個參數表示滾動的數量,第三個參數表示滾動的單位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "pages")表示向右滾動三行

xview_moveto(fraction)
— 跟 xview("moveto", fraction) 一樣

xview_scroll(number, what)
— 跟 xview("scroll", number, what) 一樣

yview(*args)
— 該方法用於在垂直方向上滾動 Listbox 組件的內容,一般通過綁定 Scollbar 組件的 command 選項來實現(具體操作參考:Scrollbar)
— 如果第一個參數是 "moveto",則第二個參數表示滾動到指定的位置:0.0 表示最頂端,1.0 表示最底端
— 如果第一個參數是 "scroll",則第二個參數表示滾動的數量,第三個參數表示滾動的單位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滾動三頁

yview_moveto(fraction)
— 跟 yview("moveto", fraction) 一樣

yview_scroll(number, what)
— 跟 yview("scroll", number, what) 一樣

到此這篇關於Python中Tkinter組件Listbox的具體使用的文章就介紹到這瞭,更多相關Python Tkinter Listbox內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: