Kivy - 樹檢視



大多數 GUI 工具包,包括 Kivy,都提供了一個 TreeView 小部件,使用者可以使用它以樹狀格式顯示的分層資料進行導航和互動。作業系統檔案資源管理器中顯示的檔案和目錄結構就是一個典型的 TreeView 示例。

“kivy.uix.treeview”模組包含三個重要類的定義:TreeView、TreeViewNode 和 TreeViewLabel。這些類的物件構成了樹檢視小部件。

TreeView 由 TreeViewNode 例項填充。庫中的任何小部件(例如標籤或按鈕)或使用者定義的小部件物件都可以與 TreeViewNode 組合。

樹檢視的根是 TreeView 物件本身。

from kivy.uix.treeview import TreeView
tv = TreeView()

可以在此根下方直接新增一個或多個節點。TreeViewLabel 用作 add_node 方法的引數。

from kivy.uix.treeview import TreeViewLabel
n1 = tv.add_node(TreeViewLabel(text='node 1'))

您可以將節點新增到節點本身,而不是將其新增到樹的根。將父節點的例項作為第二個引數提供給 add_node() 方法 -

n2 = tv.add_node(TreeViewLabel(text='Political Sci'), n1)

預設情況下,樹檢視的根小部件處於開啟狀態,其預設標題為“Root”。要更改此設定,可以使用 TreeView.root_options 屬性。這將把選項傳遞給根小部件 -

tv = TreeView(root_options=dict(text='My root'))

TreeViewLabel 本身就是一個標籤,因此無法像 on_press 一樣生成任何事件。為此,您應該定義一個繼承 TreeView 和 Button 的類。

class TreeViewButton(Button, TreeViewNode):
   pass

然後,您可以處理不同的事件,例如 -

  • on_node_expand - 節點展開時觸發

  • on_node_collapse - 節點摺疊時觸發

示例

下面給出的程式碼構成一個簡單的樹檢視,顯示了大學每個學院提供的科目。垂直箱式佈局包含一個樹檢視小部件和一個按鈕。樹檢視的根是開啟的。

要展開節點,請單擊其左側的“>”按鈕。它會變成向下箭頭。如果再次單擊,則節點將被摺疊。

from kivy.app import App
from kivy.uix.treeview import TreeView, TreeViewLabel
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window

Window.size = (720, 350)

class DemoApp(App):
   def build(self):
      lo = BoxLayout(orientation='vertical')
   
      self.tv = TreeView(root_options={
         'text': 'Faculty-wise Subjects',
         'font_size': 20}
      )
      self.n1 = self.tv.add_node(TreeViewLabel(text='Arts'))
      self.n2 = self.tv.add_node(TreeViewLabel(text='Commerce'))
      self.n3 = self.tv.add_node(TreeViewLabel(text='Science'))
      
      self.n4 = self.tv.add_node(
         TreeViewLabel(text='Sociology'), self.n1
      )
      self.n5 = self.tv.add_node(
         TreeViewLabel(text='History'), self.n1
      )
      self.n6 = self.tv.add_node(
         TreeViewLabel(text='Political Sci'), self.n1
      )
      
      self.n7 = self.tv.add_node(
         TreeViewLabel(text='Accountancy'), self.n2
      )
      self.n8 = self.tv.add_node(
         TreeViewLabel(text='Secretarial Practice'), self.n2
      )
      self.n9 = self.tv.add_node(
         TreeViewLabel(text='Economics'), self.n2
      )
      
      self.n10 = self.tv.add_node(
         TreeViewLabel(text='Physics'), self.n3
      )
      self.n11 = self.tv.add_node(
      TreeViewLabel(text='Mathematics'), self.n3
      )
      self.n12 = self.tv.add_node(
         TreeViewLabel(text='Chemistry'), self.n3
      )
      
      lo.add_widget(self.tv)
      return lo
DemoApp().run()

輸出

Kivy Tree View
廣告
© . All rights reserved.