Python+tkinter實(shí)現(xiàn)樹形圖繪制
初步
Treeview是ttk中的樹形表組件,功能十分強(qiáng)大,非常適用于系統(tǒng)路徑的表達(dá)。為了知道屬性圖到底是什么,下面先做個(gè)最簡單的樹形圖

其代碼如下
import tkinter as tk
from tkinter import ttk
dct = {
"中國" : ["北京", "臺北", "香港"],
"美國" : ["紐約", "華盛頓"],
"日本" : ["東京", "大阪"]
}
win = tk.Tk() # 設(shè)置窗口大小
# 此為根節(jié)點(diǎn)
tree = ttk.Treeview(win, show = "tree")
for key in dct:
father = tree.insert("", 0, key, text=key)
for v in dct[key]:
tree.insert(father, 1, v,
text=v, values=(f"{key}-{v}"))
tree.pack(side=tk.LEFT, expand = True, fill = tk.BOTH)
win.mainloop()首先,我們創(chuàng)建了一個(gè)字典,用于構(gòu)成樹形圖的節(jié)點(diǎn)。
接下來, ttk.Treeview 生成一個(gè)樹形圖,這個(gè)幾乎沒什么問題,和tkinter其他所有組件完全一致,只是多了個(gè) "show" ,表明這是個(gè)樹形圖,說明Treeview這個(gè)組件或許還有其他形式。
然后,就到了唯一關(guān)鍵的函數(shù) insert ,其輸入?yún)?shù)分別為父節(jié)點(diǎn)、所在列、節(jié)點(diǎn)ID,如果不輸入節(jié)點(diǎn)ID,那么將有系統(tǒng)分配,這個(gè)參數(shù)并不是必須的。而后 text 為其顯示的名稱,非常直觀。最后values是一個(gè)并未體現(xiàn)在界面上的值,但可以調(diào)用。
回調(diào)函數(shù)
Treeview有三種基本的回調(diào)函數(shù),分別當(dāng)選擇節(jié)點(diǎn)、打開父節(jié)點(diǎn)和關(guān)閉父節(jié)點(diǎn)時(shí)觸發(fā)。仍以上述Treeview為例,其效果如下

具體修改方案為,在mainloop之前,添加如下代碼
def slct(evt):
for item in tree.selection():
print(tree.item(item, "values"))
def open_(evt):
for item in tree.selection():
print(f"{item} has opened")
def close(evt):
for item in tree.selection():
print(f"{item} has closed")
tree.bind('<<TreeviewSelect>>', slct)
tree.bind('<<TreeviewOpen>>', open_)
tree.bind('<<TreeviewClose>>', close)其中,綁定的三個(gè)函數(shù)slct, open_和close,分別對應(yīng)選中節(jié)點(diǎn)、打開或關(guān)閉節(jié)點(diǎn)時(shí)觸發(fā)。其函數(shù)內(nèi)容則基本相同,都是打印當(dāng)前選中節(jié)點(diǎn)的相關(guān)值,其中父節(jié)點(diǎn)直接輸出節(jié)點(diǎn)的名字,子節(jié)點(diǎn)則輸出其內(nèi)部定義的values。
通過tree.selection()可獲取選中內(nèi)容,其返回值是一個(gè)元組;如果改用tree.focus(),則可返回焦點(diǎn)所在的節(jié)點(diǎn)。
當(dāng)然,這兩個(gè)函數(shù)不僅有讀取的功能,當(dāng)二者有輸入時(shí),例如 focus(item) 可讓 item 獲得焦點(diǎn);而 selection(selop, items) ,若 selop 為None,則以列表形式返回所有items,若 selop 指定了選擇方法,則按照給定的方法選中相應(yīng)的items。
綁定滾動條
這種樹形圖如果全都展開,一定會特別長,為了在有限的區(qū)間展示無限多的樹形圖節(jié)點(diǎn),就需要為其綁定滾動條,其實(shí)很簡單,只需在mainloop前面添加下面幾行代碼即可
scroll = ttk.Scrollbar(win) scroll.config(command=tree.yview) scroll.pack(side=tk.RIGHT, fill=tk.Y) # 給treeview添加配置 tree.configure(yscrollcommand=scroll.set)
效果如下

到此這篇關(guān)于Python+tkinter實(shí)現(xiàn)樹形圖繪制的文章就介紹到這了,更多相關(guān)Python tkinter樹形圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django+uni-app實(shí)現(xiàn)數(shù)據(jù)通信中的請求跨域的示例代碼
這篇文章主要介紹了Django+uni-app實(shí)現(xiàn)數(shù)據(jù)通信中的請求跨域的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Django項(xiàng)目基礎(chǔ)配置和基本使用過程解析
這篇文章主要介紹了Django項(xiàng)目基礎(chǔ)配置和基本使用過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
探索python?dask靈活的并行計(jì)算庫應(yīng)用場景示例
這篇文章主要介紹了探索python?dask靈活的并行計(jì)算庫應(yīng)用場景示例,Dask?是?Python?中的一個(gè)靈活的并行計(jì)算庫,允許用戶利用?CPU?內(nèi)核的強(qiáng)大功能,對大于內(nèi)存的數(shù)據(jù)集執(zhí)行分布式計(jì)算2024-01-01

