1. 程式人生 > >Python GUI程式設計實戰--Tkinter元件詳解:ListBox

Python GUI程式設計實戰--Tkinter元件詳解:ListBox

Listbox控制元件
列表框控制元件;在Listbox視窗小部件是用來顯示一個字串列表給使用者
Listbox 元件通常被用於顯示一組文字選項,Listbox 元件跟 Checkbutton 和Radiobutton 元件類似,不過 Listbox 是以列表的形式來提供選項的(後兩個是通過按鈕的形式)。
語法
Listbox(master=None, **options) (class)
master – 父元件
**options – 元件選項,下方表格詳細列舉了各個選項的具體含義和用法:

常用元件選項講解:
background<= =>bg: 設定背景顏色,預設值由系統指定。
borderwidth<= =>bd:指定 Listbox 的邊框寬度, 預設值由系統指定,通常是 2 畫素。

cursor: 指定當滑鼠在 Listbox 上飄過的時候的滑鼠樣式,預設值由系統指定。

exportselection: 指定選中的專案文字是否可以被複制到剪貼簿,預設值是 True, 可以修改為 False 表示不允許複製專案文字。

font:指定 Listbox 中文字的字型,預設值由系統指定

foreground<==>fg:設定 Listbox 的文字顏色,預設值由系統指定

height: 設定 Listbox 顯示的行數(不是畫素),預設值是 10

highlightbackground:指定當 Listbox 沒有獲得焦點的時候高亮邊框的顏色, 預設值由系統指定,通常是標準背景顏色

highlightcolor:指定當 Listbox 獲得焦點的時候高亮邊框的顏色,預設值由系統指定

highlightthickness: 指定高亮邊框的寬度,預設值是 1

listvariable:指向一個 StringVar 型別的變數,該變數存放 Listbox 中所有的專案,在 StringVar 型別的變數中,用空格分隔每個專案,例如 var.set(“雞蛋 鴨蛋 鵝蛋 李狗蛋”)

relief:指定邊框樣式, 預設值是 SUNKEN

selectbackground: 指定當某個專案被選中的時候背景顏色, 預設值由系統指定

selectborderwidth:指定當某個專案被選中的時候邊框的寬度,預設是由 selectbackground 指定的顏色填充,沒有邊框, 如果設定了此選項,Listbox 的每一項會相應變大,被選中項為 RAISED 樣式

selectforeground:指定當某個專案被選中的時候文字顏色, 預設值由系統指定

selectmode: 決定選擇的模式,四種不同的選擇模式:SINGLE(單選)、BROWSE(也是單選,但拖動滑鼠或通過方向鍵可以直接改變選項)、MULTIPLE(多選)和 EXTENDED(也是多選,但需要同時按住 Shift 鍵或 Ctrl 鍵或拖拽滑鼠實現), 預設是 BROWSE

setgrid:指定一個布林型別的值,決定是否啟用網格控制,預設值是 False

takefocus: 指定該元件是否接受輸入焦點(使用者可以通過 tab 鍵將焦點轉移上來), 預設值是 True

width: 設定 Listbox 的寬度(單位是文字單元),文字單元是英文字母的平均寬度(所以如果該選項設定為 2,那麼是無法容納"ww"這兩個寬度大於平均寬度的字母的), 預設值是 20

xscrollcommand: 為 Listbox 元件新增一條水平滾動條,將此選項與 Scrollbar 元件相關聯即可

yscrollcommand:為 Listbox 元件新增一條垂直滾動條,將此選項與 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) 方法,然後再將 事件及當前滑鼠位置繫結到
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, UNITS) 表示向右滾動三行

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) 一樣
實戰內容
1.製作一個列表框,顯示資料,並可以多選刪除資料

from tkinter import *
'''
Listbox元件根據selectmode選項提供了四種不同的選擇模式:SINGLE(單選)
BROWSE(也是單選,但推動滑鼠或通過方向鍵可以直接改變選項)
MULTIPLE(多選)和EXTENDED(也是多選,但需要同時按住Shift和Ctrl或拖動滑鼠實現
),預設是BROWSE
'''
root = Tk()
#height=11設定listbox元件的高度,預設是10行。
lb = Listbox(root, selectmode=MULTIPLE, height=6)
lb.pack()
for item in['公雞','母雞','小雞','火雞','戰鬥機',]:
    # END表示每插入一個都是在最後一個位置
    lb.insert(END,item)
bt = Button(root, text='刪除', command=lambda x=lb:x.delete(ACTIVE))
bt.pack()
mainloop()

在這裡插入圖片描述
2.為Listbox新增垂直滾動條

from tkinter import *
'''
為Listbox新增滾動條。 
滾動條是獨立的元件。 
為了在某個足尖上安裝垂直滾動條,你需要做兩件事: 
1、設定該元件的yscrollbarcommand選項為Scrollbar元件的set()方法 
2、設定Scrollbar元件的command選項為該元件的yview()方法 
'''
root = Tk()
#垂直滾動條元件  
slb = Scrollbar(root)
#設定垂直滾動條顯示的位置 
slb.pack(side=RIGHT,fill=Y)
#Listbox元件新增Scrollbar元件的set()方法
lb = Listbox(root,yscrollcommand=slb.set)
for i in range(1000):
    lb.insert(END,i)
lb.pack(side=LEFT,fill=BOTH)
#設定Scrollbar元件的command選項為該元件的yview()方法
slb.config(command=lb.yview)
mainloop()

在這裡插入圖片描述
Python交流群:942913325 歡迎大家一起交流學習