天天看點

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

這一節我們将繼續介紹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時,左擊滑鼠并移動可以選中資料項。其效果圖如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

當selectmode=tkinter.SINGLE時,通過左擊滑鼠來選中資料項,此時移動滑鼠不能再選中。其效果圖如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

Listbox對象調用insert()方法可以向清單框中插入資料項,插入方式有兩種。

第一種方式,當listbox調用insert()方法并設定參數1為tkinter.END時,表示的是使用尾插法插入資料項,即插入資料項在資料項清單的尾部插入,如當使用尾插法插入清單["111","222","333","444"]時,将清單中的元素依次取出,并從前向後插入清單框;

第二種方式,當設定參數1為tkinter.ACTIVE時,表示的是使用頭插法插入資料項,即插入資料項在資料清單的頭部插入,如當插入資料項"555"時,在整個資料清單("111","222","333","444")的頭部插入。程式運作的結果如下圖:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

2.Listbox的方法運用

Listbox提供了很多操作清單框資料項的方法。如下:

①delete()

delete()方法的功能為通過指定的下标删除Listbox資料項。當調用delete()方法的參數隻有一個下标時,即删除此下标對應的資料項;當參數為兩個start和end時,即删除下标從start到end的資料項。

Listbox資料項的下标與資料項插入的先後順序無關,隻與資料項在清單中的位置有關,下标從0開始。如下圖:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

如上,資料項的下标從上往下,由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開始,依次遞增進行。運作後的結果如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

之後運作listbox.delete(1),删除下标1對應的資料項,運作結果如下圖:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

②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對應的資料項,代碼執行結果如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

③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對應資料項的選中狀态。

清除前:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

清除後:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

第二行代碼為清除下标0對應資料項的選中狀态,

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2
Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

④delete()方法

delete()方法的功能為删除清單框中對應下标的資料項。當Listbox對象調用方法delete()傳入的下标參數隻有一個時,即删除此下标對應的資料項;當傳入的下标參數為start至end時,即删除下标從start至end的資料項。代碼如下:

如上,在①中代碼的基礎上添加了以下代碼:

執行第一行代碼,删除下标從1至3的資料項,執行後結果如下:

删除前:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

删除後:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

接着執行第二行代碼,删除下标1對應的資料項,結果如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

⑤其他方法

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調用各種方法擷取資料項的資訊,各種方法的功能如注釋所示。代碼列印結果如下:

Python學習(29)--tkinter圖形界面程式設計2Python學習(29)--tkinter圖形界面程式設計2

以上就是本節介紹的有關Listbox的全部内容,主要掌握的内容有Listbox插入資料項,選中資料項,清除資料項選中狀态以及删除資料項,擷取資料項資訊的各種方法。下一節我們将繼續介紹tkinter中的控件,敬請期待。