Python+tkinter實(shí)現(xiàn)樹形圖繪制
初步
Treeview是ttk中的樹形表組件,功能十分強(qiáng)大,非常適用于系統(tǒng)路徑的表達(dá)。為了知道屬性圖到底是什么,下面先做個最簡單的樹形圖
其代碼如下
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òu)成樹形圖的節(jié)點(diǎn)。
接下來, ttk.Treeview
生成一個樹形圖,這個幾乎沒什么問題,和tkinter其他所有組件完全一致,只是多了個 "show"
,表明這是個樹形圖,說明Treeview這個組件或許還有其他形式。
然后,就到了唯一關(guān)鍵的函數(shù) insert
,其輸入?yún)?shù)分別為父節(jié)點(diǎn)、所在列、節(jié)點(diǎn)ID,如果不輸入節(jié)點(diǎn)ID,那么將有系統(tǒng)分配,這個參數(shù)并不是必須的。而后 text
為其顯示的名稱,非常直觀。最后values是一個并未體現(xiàn)在界面上的值,但可以調(diào)用。
回調(diào)函數(shù)
Treeview有三種基本的回調(diào)函數(shù),分別當(dāng)選擇節(jié)點(diǎn)、打開父節(jié)點(diǎn)和關(guān)閉父節(jié)點(diǎn)時觸發(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)
其中,綁定的三個函數(shù)slct, open_和close,分別對應(yīng)選中節(jié)點(diǎn)、打開或關(guān)閉節(jié)點(diǎn)時觸發(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)容,其返回值是一個元組;如果改用tree.focus(),則可返回焦點(diǎn)所在的節(jié)點(diǎn)。
當(dāng)然,這兩個函數(shù)不僅有讀取的功能,當(dāng)二者有輸入時,例如 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)文章
利用Python?Matplotlib繪圖并輸出圖像到文件中的方式
這篇文章主要介紹了利用Python?Matplotlib繪圖并輸出圖像到文件中的方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09將python文件打包exe獨(dú)立運(yùn)行程序方法詳解
這篇文章主要介紹了將python文件打包exe獨(dú)立運(yùn)行程序方法詳解,需要的朋友可以參考下2020-02-02利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例
這篇文章主要介紹了利用Python裁切tiff圖像且讀取tiff,shp文件的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03如何打包Python Web項(xiàng)目實(shí)現(xiàn)免安裝一鍵啟動的方法
這篇文章主要介紹了如何打包Python Web項(xiàng)目,實(shí)現(xiàn)免安裝一鍵啟動,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Python函數(shù)的定義與調(diào)用方法實(shí)例
Python 中函數(shù)的應(yīng)用非常廣泛,函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段,這篇文章主要給大家介紹了關(guān)于Python函數(shù)的定義與調(diào)用的相關(guān)資料,需要的朋友可以參考下2023-06-06