一、TreeView介紹
TreeView組件是一個樹狀結構和表格的結合體。第一列是樹狀結構,后幾列是列表。每一行表示一個item,樹的item可以分級,每個item有子item,名稱對應text標簽。每一行的值用values元組里的值表示。
item有5個標簽,分別是:text,image,values,open,tags。
二、參數說明
1、TreeView參數:
參數 | 作用 |
---|---|
columns | 值是一個列表。列表里每個元素代表一個列標識符的名稱。列表的長度為列的長度。 |
displaycolumns | 列表,這里的元素是列表符,表示的是哪些列可以顯示以及順序,或者用‘#all’表示全部顯示 |
height | 表示要顯示幾行數據(注意:這個部件的寬度是根據列的多少自動定義的) |
padding | 填充,是個最多4個元素的列表 |
selectmode | 定義如何去選擇一行。"extended"是可選多行(用Ctrl+鼠標), “browse” 是只能選一行, “none"是不能改變選擇,默認是"extended” |
show | 表示這個部件顯示哪種功能,“tree”表示僅顯示第一列(單樹模式),“headings”表示顯示除一列的其他列(單列表模式),默認是"tree headings",顯示所有列。注意,‘#0’(第一列)是永遠存在的 |
2、item參數:
選項 | 描述 |
---|---|
text | 樹狀結構這邊的名稱。 |
image | 樹狀結構這邊的名稱的左邊加個圖。 |
values | 列表結構這邊每一行的值,values未賦值的列會為空值,超過列的長度會被截斷。 |
open | 布爾值,代表子item的顯示打開或關閉 |
tags | 與item關聯的標記 |
3、tag參數
選項 | 描述 |
---|---|
foreground | 前景色 |
background | 背景色 |
font | 字體 |
image | 圖 |
三、TreeView可選事件和方法
<< TreeviewSelect>>,代表選擇變化是發生;
<< TreeviewOpen>>,item的open=True時發生
<< TreeviewClose>>,item的open=False時發生
提示:可用 Treeview.focus() 和 Treeview.selection() 可獲取 item 或 items.
方法列表:
bbox(item, column=None)
返回一個item的范圍(x,y,width, height),如果column指定了一個列,則返回一個元素范圍,如果item不可視,則返回空值。
get_children(item=None)
返回一個item的所有子item,這個子item是一個列表形式,如果item沒指定,則返回根目錄的item
set_children(item, *newchildren)
設置一個item的新子item。這里設置了之后實際是全部替換
column(column, option=None, **kw)
給各列設置屬性,或返回屬性。
第一個column是列標識符
第二個option,如果不設置則返回所有屬性的字典,如果設置則返回那個屬性的值。
kw里的option有5個
id:只讀屬性,返回列名。
anchor:文字在cell里的對齊方式,標准的tk的anchor屬性
minwidth: 值,單位是像素,列的最小寬度
stretch: 布爾值,表示列的寬度是否隨整個部件的改動而變化。
width:列寬,單位是像素。
提示:如果要設置樹狀結構那列,用column=“#0”
delete(*items)
刪除item及其子item
detach(*items)
斷開item及其子item,這里的斷開只是不顯示,以后還可以鏈接起來。
exists(item)
返回True,如果item在樹里。
focus(item=None)
如果不指定item,則返回當前獲得焦點的item,如果指定item,則讓該item獲得焦點。若無則返回空值。
heading(column, option=None, **kw)
查詢或修改指定列的標題選項
第一個column是列標識符
第二個option,如果不設置則返回所有屬性的字典,如果設置則返回那個屬性的值。
kw里的option有4個
text:列頭名
image: 列頭名右的圖像
anchor:文字在heading里的對齊方式,標准的tk的anchor屬性
command:點擊列頭的回調函數
insert(parent, index, iid=None, **kw)
創建新item並返回新創建item的項標識符。
parent:用item ID表示父item,或者‘’表示根item
index:數值int,或‘end’,表示item插入的位置
iid:item標識符,可自動生成
kw:看上面的Item Options介紹。
item(item, option=None, **kw)
查詢或修改指定item的選項
selection(selop=None, items=None)
如果沒指定selop則返回所有選中的items,列表形式,若selop指定了selection methods,則相應act。
set(item, column=None, value=None)
指定item,如果不設定column和value,則返回他們的字典,如果設定了column,則返回該column的value,如果value也設定了,則作相應更改。
四、代碼示例
1、表格代碼:
import tkinter as tk from tkinter import ttk window = tk.Tk() # 設置窗口大小 winWidth = 600 winHeight = 400 # 獲取屏幕分辨率 screenWidth = window.winfo_screenwidth() screenHeight = window.winfo_screenheight() x = int((screenWidth - winWidth) / 2) y = int((screenHeight - winHeight) / 2) # 設置主窗口標題 window.title("TreeView參數說明") # 設置窗口初始位置在屏幕居中 window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y)) # 設置窗口圖標 window.iconbitmap("./image/icon.ico") # 設置窗口寬高固定 window.resizable(0, 0) # 定義列的名稱 columns = ("name", "gender", "age") tree = ttk.Treeview(window, show = "headings", columns = columns, selectmode = tk.BROWSE) # 設置表格文字居中 tree.column("name", anchor = "center") tree.column("gender", anchor = "center") tree.column("age", anchor = "center") # 設置表格頭部標題 tree.heading("name", text = "姓名") tree.heading("gender", text = "性別") tree.heading("age", text = "年齡") # 設置表格內容 lists = [{"name": "yang", "gender": "男", "age": "18"}, {"name": "鄭", "gender": "女", "age": "25"}] i = 0 for v in lists: tree.insert('', i, values = (v.get("name"), v.get("gender"), v.get("age"))) i += 1 tree.pack(expand = True, fill = tk.BOTH) # 獲取當前點擊行的值 def treeviewClick(event): # 單擊 for item in tree.selection(): item_text = tree.item(item, "values") print(item_text) # 鼠標左鍵抬起 tree.bind('<ButtonRelease-1>', treeviewClick) # 鼠標選中一行回調 def selectTree(event): for item in tree.selection(): item_text = tree.item(item, "values") print(item_text) # 選中行 #tree.bind('<<TreeviewSelect>>', selectTree) window.mainloop()
2、樹狀代碼:
import tkinter as tk from tkinter import ttk window = tk.Tk() # 設置窗口大小 winWidth = 600 winHeight = 400 # 獲取屏幕分辨率 screenWidth = window.winfo_screenwidth() screenHeight = window.winfo_screenheight() x = int((screenWidth - winWidth) / 2) y = int((screenHeight - winHeight) / 2) # 設置主窗口標題 window.title("TreeView參數說明") # 設置窗口初始位置在屏幕居中 window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y)) # 設置窗口圖標 window.iconbitmap("./image/icon.ico") # 設置窗口寬高固定 window.resizable(0, 0) # 定義列的名稱 tree = ttk.Treeview(window, show = "tree") myid=tree.insert("",0,"中國",text="中國China",values=("1")) # ""表示父節點是根 myidx1=tree.insert(myid,0,"廣東",text="中國廣東",values=("2")) # text表示顯示出的文本,values是隱藏的值 myidx2=tree.insert(myid,1,"江蘇",text="中國江蘇",values=("3")) myidy=tree.insert("",1,"美國",text="美國USA",values=("4")) myidy1=tree.insert(myidy,0,"加州",text="美國加州",values=("5")) # 鼠標選中一行回調 def selectTree(event): for item in tree.selection(): item_text = tree.item(item, "values") print(item_text) # 選中行 tree.bind('<<TreeviewSelect>>', selectTree) tree.pack(expand = True, fill = tk.BOTH) window.mainloop()
五、效果圖