這一節我們将繼續介紹tkinter中的控件部分,本節主要介紹的控件為下拉清單控件Listbox。
1.Listbox
Listbox是一個清單框控件,其主要功能為提供一個資料清單供使用者選擇。使用者可以通過滑鼠選中清單框提供的資料,但不能修改清單框中的資料項。應用程式可以對使用者的選中資料項事件作出響應。代碼例子如下:
<b>[python]</b> view plain copy
import tkinter
win=tkinter.Tk()#建立一個窗體
win.title("MyWindow")#為窗體添加一個标題
win.geometry("400x400+120+50")#設定窗體的位置和大小
#Listbox控件
listbox=tkinter.Listbox(win,#設定Text控件的父容器為win
selectmode=tkinter.BROWSE
#設定下拉清單框listbox資料項的選中模式為:
#當左擊滑鼠并移動時,可以選中清單項
#selectmode=tkinter.SINGLE
#設定通過左擊滑鼠的方式選中資料項
)
for item in ["111","222","333","444"]:
listbox.insert(tkinter.END,item)#從尾部插入清單框元素item
listbox.insert(tkinter.ACTIVE,"555")#從頭部插入清單框元素"555"
listbox.pack()#将清單框挂載到父容器
win.mainloop()#顯示建立的主窗體
如上, 通過tkinter子產品的Listbox()方法建立了一個清單框listbox。Listbox控件的屬性selectmode用于設定清單框資料項的選中方式。當selectmode=tkinter.BROWSE時,左擊滑鼠并移動可以選中資料項。其效果圖如下:

當selectmode=tkinter.SINGLE時,通過左擊滑鼠來選中資料項,此時移動滑鼠不能再選中。其效果圖如下:
Listbox對象調用insert()方法可以向清單框中插入資料項,插入方式有兩種。
第一種方式,當listbox調用insert()方法并設定參數1為tkinter.END時,表示的是使用尾插法插入資料項,即插入資料項在資料項清單的尾部插入,如當使用尾插法插入清單["111","222","333","444"]時,将清單中的元素依次取出,并從前向後插入清單框;
第二種方式,當設定參數1為tkinter.ACTIVE時,表示的是使用頭插法插入資料項,即插入資料項在資料清單的頭部插入,如當插入資料項"555"時,在整個資料清單("111","222","333","444")的頭部插入。程式運作的結果如下圖:
2.Listbox的方法運用
Listbox提供了很多操作清單框資料項的方法。如下:
①delete()
delete()方法的功能為通過指定的下标删除Listbox資料項。當調用delete()方法的參數隻有一個下标時,即删除此下标對應的資料項;當參數為兩個start和end時,即删除下标從start到end的資料項。
Listbox資料項的下标與資料項插入的先後順序無關,隻與資料項在清單中的位置有關,下标從0開始。如下圖:
如上,資料項的下标從上往下,由0開始,依次遞增。代碼例子如下:
selectmode=tkinter.SINGLE
#設定下拉清單框listbox的選中模式為:
listbox.delete(1,3)#将清單框的下标為1-3的資料項删去
listbox.delete(1)#将清單框下标為1的資料項删去
在之前1中代碼的基礎上,我們添加用于删除清單框資料項的代碼。
listbox.delete(1,3)删除下标為1-3的資料項,删除完下标從1到3的資料項之後,剩餘資料項的下标将重新排列。排列的方式依然按照,從上往下,從0開始,依次遞增進行。運作後的結果如下:
之後運作listbox.delete(1),删除下标1對應的資料項,運作結果如下圖:
②select_set()方法
select_set()方法的功能為選中對應下标的資料項。當調用select_set()方法且參數隻有一個下标時,會選中此下标對應的資料項;當參數為兩個,start和end時,會選中下标從start至end的資料項.如下代碼:
listbox.select_set(2,4)#選中下标2-4對應的資料項
listbox.select_set(0)#選中下标0對應的資料項
如上,在1中代碼的基礎上,添加了以下代碼:
listbox.select_set(2,4)
listbox.select_set(0)
執行代碼後,選中下标2-4和下标0對應的資料項,代碼執行結果如下:
③select_clear()
select_clear()方法的功能為清除資料項的選中狀态,即使得一個資料項從選中狀态切換到未選中狀态。當調用方法select_clear(),隻有一個下标參數時,即清除此下标的選中狀态;當調用方法select_clear(),下标參數為start和end時,即清除下标從start至end對應資料項的選中狀态。
之前我們介紹了select_set()方法用于選中資料項,在此基礎上我們使用select_clear()方法清除這些資料項的選中狀态。代碼如下:
listbox.select_clear(2,3)#清除下标2-3對應資料項的選中狀态
listbox.select_clear(0)#清除下标0對應資料項的選中狀态
在②中代碼的基礎上添加了以下代碼:
第一行代碼即為清除下标為2-3對應資料項的選中狀态。
清除前:
清除後:
第二行代碼為清除下标0對應資料項的選中狀态,
④delete()方法
delete()方法的功能為删除清單框中對應下标的資料項。當Listbox對象調用方法delete()傳入的下标參數隻有一個時,即删除此下标對應的資料項;當傳入的下标參數為start至end時,即删除下标從start至end的資料項。代碼如下:
如上,在①中代碼的基礎上添加了以下代碼:
執行第一行代碼,删除下标從1至3的資料項,執行後結果如下:
删除前:
删除後:
接着執行第二行代碼,删除下标1對應的資料項,結果如下:
⑤其他方法
Listbox還提供了很多擷取資料項資訊的方法,如size()為擷取清單框的長度;get()方法為擷取清單框對應下标的資料項内容;curselection()為擷取目前被選中資料項的下标;select_includes()為判斷某下标對應的資料項是否被選中,若被選中傳回True,否則傳回True。代碼如下:
print("清單框長度:",listbox.size())#清單框的長度
print("擷取清單框下标2-4對應的資料項:",listbox.get(2,4))
print("擷取清單框下标3對應的資料項:",listbox.get(3))
print("擷取目前選中資料項的下标:",listbox.curselection())
#判斷下标為0的資料項是否被選中,選中傳回True,未選中傳回False
print("判斷下标為0的資料項是否選中:",listbox.select_includes(0))
#判斷下标為1的資料項是否被選中,選中傳回True,未選中傳回False
print("判斷下标為1的資料項是否選中:",listbox.select_includes(1))
如上代碼為listbox調用各種方法擷取資料項的資訊,各種方法的功能如注釋所示。代碼列印結果如下:
以上就是本節介紹的有關Listbox的全部内容,主要掌握的内容有Listbox插入資料項,選中資料項,清除資料項選中狀态以及删除資料項,擷取資料項資訊的各種方法。下一節我們将繼續介紹tkinter中的控件,敬請期待。