翻譯自 Tree抄腔。
樹視圖(ttk.Treeview)小部件可以顯示并允許瀏覽 Item 的層次結構瓢湃,并可以將每個 Item 的一個或多個屬性顯示為樹右側的列理张。它允許您構建類似于在文件管理器(如 OS X 查找器或 Windows 資源管理器)中找到的樹顯示的用戶界面赫蛇。創(chuàng)建的方式是:
tree = ttk.Treeview(parent)
如果需要,可以按常規(guī)方式添加水平和垂直滾動條雾叭。
1 添加 Item 到 Tree
要對樹視圖執(zhí)行任何有用的操作悟耘,您需要向其中添加一個或多個項。每個項目表示樹中的單個節(jié)點织狐,無論是葉節(jié)點還是內(nèi)部節(jié)點暂幼。項目由唯一 ID 引用;這可以在首次創(chuàng)建項目時由程序員分配移迫,或者小部件可以自動為項目選擇 ID旺嬉。
通過使用樹視圖的 "insert" 方法將 item 插入到樹中來創(chuàng)建項。若要插入項厨埋,需要知道其在樹中的位置邪媳,這意味著指定父項以及新項應在父項的子項列表中插入的位置。
Treeview 小部件會自動創(chuàng)建一個根節(jié)點(未被顯示)荡陷,其 ID 為 "{}"
(即空字符串)雨效,可以用作添加的第一個級別項的父級。父項的子項列表中的位置由索引指定(0 是第一個废赞,指定 "end"
索引表示在所有現(xiàn)有子級之后插入)徽龟。
通常,您還將指定顯示在樹中的每個項的名稱唉地。名稱旁邊還有其他選項可以添加圖像据悔,指定節(jié)點是打開還是關閉传透,等等。
方法 insert
的使用方法是:tree.insert(parent, index, iid=None, **kw)
极颓,可以看使用的例子:
從圖1 可以看出如果指定 iid
旷祸,則 insert
方法會返回 iid
名稱,否則返回被自動分配的 iid
的值讼昆。
2 重新排列項目
可以將節(jié)點(及其后代(如果有)移動到樹中的不同位置托享;將節(jié)點及其后代(如果有)移動到樹中的不同位置。唯一的限制是節(jié)點不能在其子級下移動浸赫。目標位置通過父位置指定闰围,并索引到子項列表中,就像使用 "insert" 所做的那樣既峡。比如:
# 移動 widgets 到 gallery 之下
tree.move('widgets', 'gallery', 'end')
可以將項從樹中分離(detached )羡榴,該樹從層次結構中刪除項及其后代,但不會銷毀項运敢,從而允許您稍后使用"move"重新插入它們校仑。
tree.detach('widgets')
也可以使用 delete
刪除項目:
tree.delete('widgets')
如果要導航層次結構,有一些方法允許您查找項("parent"
)的父項传惠,查找項的下一個或以前的同級項("next"
和 "prev"
)迄沫,并返回項("children")的子項列表。
您可以通過修改 "open"
項配置選項來控制項目是否處于打開狀態(tài)并顯示其子項卦方。
tree.item('widgets', open=True)
isopen = tree.item('widgets', 'open')
3 顯示每個項目的信息
樹視圖還可以顯示有關每個項目的一個或多個附加信息羊瘩,這些信息顯示為主樹顯示右側的列。
同樣盼砍,每列都由您分配的符號名稱引用尘吗。無論是在首次創(chuàng)建小部件時,還是以后創(chuàng)建小部件,您均可以使用樹視圖小部件的 "columns"
配置選項指定 columns 的列表浇坐。
tree = ttk.Treeview(root, columns=('size', 'modified', 'owner'))
# 等價于
tree['columns'] = ('size', 'modified', 'owner')
您可以指定列的寬度睬捶、列中項信息的顯示方式對齊等。還可以提供有關列標題的信息近刘,例如要顯示的文本擒贸、可選圖像、對齊方式以及單擊項時要調用的腳本(例如跌宛,對樹進行排序)酗宋。
tree.column('size', width=100, anchor='center')
tree.heading('size', text='Size')
可以單獨指定要在每個項的每一列中放置的值,也可以通過提供項的值列表來指定疆拘。在后一種情況下蜕猫,這是使用 "values" 項配置選項(因此可以在首次插入項時或更高版本使用),該選項采用值列表;列表的順序必須與小部件配置選項 "columns" 中的順序相同哎迄。
tree.set('widgets', 'size', '12KB')
size = tree.set('widgets', 'size')
tree.insert('', 'end', text='Listbox', values=('15KB Yesterday mark'))
4 項目外觀和事件
與文本和畫布小部件一樣回右,樹視圖小部件使用標記來幫助修改樹中項的外觀隆圆。您可以使用 "tags" 項配置選項(在創(chuàng)建項時或以后創(chuàng)建項時)為每個項分配標記列表。
然后可以指定標記配置選項翔烁,然后應用于具有該標記的所有項目渺氧。有效的標記選項包括 "foreground"(文本顏色), "background", "font" 和 "image"(如果項目指定自己的圖像)。
您還可以在標記上創(chuàng)建事件綁定蹬屹,從而捕獲鼠標單擊侣背、鍵盤事件等。
tree.insert('', 'end', text='button', tags=('ttk', 'simple'))
tree.tag_configure('ttk', background='yellow')
# the item clicked can be found via tree.focus()
tree.tag_bind('ttk', '<1>', itemClicked)
樹視圖將生成虛擬事件"<TreeviewSelect>", "<TreeviewOpen>" 和 "<TreeviewClose>" 允許您監(jiān)視對用戶所做的小部件的更改慨默。您可以使用 "selection" 方法來確定當前選擇(也可以從程序更改所選內(nèi)容)贩耐。
5 自定義顯示
treeview 小部件的顯示方式有很多,您可以對其進行自定義厦取。其中一些我們已經(jīng)看到潮太,如項目的文本,字體和顏色虾攻,列標題的名稱铡买,以及更多。下面是一些額外的霎箍。
- 使用 "height" 小部件配置選項指定要顯示的所需行數(shù)奇钞。
- 使用列的 "width" 或者 "minwidth" 選項控制每列的寬度∨缶冢可以使用符號名稱 "#0" 訪問持有樹的列蛇券。小部件請求的總寬度基于列寬度的總和缀壤。
- 使用小部件配置選項 "displaycolumns" 選擇要顯示的列和顯示順序樊拓。
- 您可以選擇使用小部件配置選項 "show"(默認為 "tree headings" 以同時顯示兩個標題)隱藏一個或兩個列標題或樹本身(僅保留列)。
您可以指定用戶是否可以通過小部件配置選項 "selectmode" 選擇單個項目或多個項塘慕,傳遞 "browse"(單個項目)筋夏、"extended"(多個項目、默認值)或 "none"图呢。