Tkinter 之TreeView表格與樹狀標籤

1、TreeView介紹python

TreeView組件是一個樹狀結構和表格的結合體。第一列是樹狀結構,後幾列是列表。每一行表示一個item,樹的item能夠分級,每一個item有子item,名稱對應text標籤。每一行的值用values元組裏的值表示。函數

item有5個標籤,分別是:text,image,values,open,tags。oop

2、參數說明字體

一、TreeView參數:spa

參數 做用
columns   值是一個列表。列表裏每一個元素表明一個列標識符的名稱。列表的長度爲列的長度。
displaycolumns  列表,這裏的元素是列表符,表示的是哪些列能夠顯示以及順序,或者用‘#all’表示所有顯示
height  表示要顯示幾行數據(注意:這個部件的寬度是根據列的多少自動定義的)
padding  填充,是個最多4個元素的列表
selectmode  定義如何去選擇一行。"extended"是可選多行(用Ctrl+鼠標), 「browse」 是隻能選一行, 「none"是不能改變選擇,默認是"extended」
show  表示這個部件顯示哪一種功能,「tree」表示僅顯示第一列(單樹模式),「headings」表示顯示除一列的其餘列(單列表模式),默認是"tree headings",顯示全部列。注意,‘#0’(第一列)是永遠存在的

二、item參數:blog

選項 描述
text 樹狀結構這邊的名稱。
image 樹狀結構這邊的名稱的左邊加個圖。
values 列表結構這邊每一行的值,values未賦值的列會爲空值,超過列的長度會被截斷。
open 布爾值,表明子item的顯示打開或關閉
tags 與item關聯的標記

 三、tag參數事件

選項 描述
foreground 前景色
background 背景色
font 字體
image

3、TreeView可選事件和方法get

<< TreeviewSelect>>,表明選擇變化是發生;
<< TreeviewOpen>>,item的open=True時發生
<< TreeviewClose>>,item的open=False時發生回調函數

提示:可用 Treeview.focus() 和 Treeview.selection() 可獲取 item 或 items.it

方法列表:

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也設定了,則做相應更改。

4、代碼示例

一、表格代碼:

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()

二、樹狀代碼:

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()

  

5、效果圖

 

相關文章
相關標籤/搜索