PyGTK-TreeViewクラス

Treeviewウィジェットは、gtk.TreeModelインターフェースを実装するモデルのコンテンツを表示します。PyGTKは以下のタイプのモデルを提供します-

  • gtk.ListStore
  • gtk.TreeStore
  • gtk.TreeModelSort

ListStoreはリストモデルです。gtk.TreeViewウィジェットに関連付けると、選択するアイテムを含むリストボックスが生成されます。gtk.ListStoreオブジェクトは次の構文で宣言されます-

store = gtk.ListStore(column_type)

リストには複数の列が含まれる場合があり、事前定義された型定数は-です。

  • gobject.TYPE_BOOLEAN
  • gobject.TYPE_BOXED
  • gobject.TYPE_CHAR
  • gobject.TYPE_DOUBLE
  • gobject.TYPE_ENUM
  • gobject.TYPE_FLOAT
  • gobject.TYPE_INT
  • gobject.TYPE_LONG
  • gobject.TYPE_NONE
  • gobject.TYPE_OBJECT
  • gobject.TYPE_STRING
  • gobject.TYPE_UCHAR
  • gobject.TYPE_UINT
  • gobject.TYPE_ULONG
  • gtk.gdk.pixbufなど

たとえば、文字列アイテムを格納するListStoreオブジェクトは次のように宣言されます-

store = gtk.ListStore(gobject.TYPE_STRING

ストアにアイテムを追加するために、append()メソッドが使用されます-

store.append (["item 1"])

TreeStoreは、複数列のツリーウィジェットのモデルです。たとえば、次のステートメントは、文字列itemを持つ1つの列を持つストアを作成します。

Store = gtk.TreeStore(gobject.TYPE_STRING)

TreeStoreにアイテムを追加するには、append()メソッドを使用します。append()メソッドには、親と行の2つのパラメーターがあります。トップレベルのアイテムを追加するには、親はNoneです。

row1 = store.append(None, ['row1'])

複数の行を追加するには、このステートメントを繰り返す必要があります。

子行を追加するには、最上位行を親パラメーターとしてappend()メソッドに渡します-

childrow = store.append(row1, ['child1'])

複数の子行を追加するには、このステートメントを繰り返す必要があります。

次に、TreeViewウィジェットを作成し、上記のTreeStoreオブジェクトをモデルとして使用します。

treeview = gtk.TreeView(store)

次に、ストアデータを表示するためにTreeViewColumnを作成する必要があります。gtk.TreeViewColumnのオブジェクトは、gtk.CelRendererを使用してヘッダーとセルを管理します。TreeViewColumnオブジェクトは、次のコンストラクターを使用して作成されます-

gtk.TreeViewColumn(title, cell_renderer,…)

タイトルとレンダラーに加えて、属性の値を取得するツリーモデル列を指定するには、0個以上の属性=列のペアが必要です。これらのパラメータは、以下に示すTreeViewColumnクラスのメソッドを使用して設定することもできます。

gtk.CellRendererは、さまざまなタイプのデータをレンダリングするための一連のオブジェクトの基本クラスです。派生クラスは、CellRendererText、CellRendererPixBuf、およびCellRendererToggleです。

TreeViewColumnクラスの次のメソッドは、そのオブジェクトを構成するために使用されます-

  • TreeViewColumn.pack_start(cell、expand = True)-このメソッドは、CellRendererオブジェクトを最初の列にパックします。展開パラメータがTrueに設定されている場合、割り当てられたスペース全体の列がセルに割り当てられます。

  • TreeViewColumn.add_attribute(cell、attribute、column)-このメソッドは、ツリー列のリストに属性マッピングを追加します。ザ・column ツリーモデルの列です。

  • TreeViewColumn.set_attributes()-このメソッドは、の属性の場所を設定します renderer を使用して attribute = column ペア

  • TreeViewColumn.set_visible()-If True, ツリービュー列が表示されます

  • TreeViewColumn.set_title()-このメソッドは、「title」プロパティを指定された値に設定します。

  • TreeViewColumn.set_lickable()-Trueに設定されている場合、ヘッダーはキーボードフォーカスを取得してクリックできます。

  • TreeViewColumn.set_alignment(xalign)-このメソッドは、「alignment」プロパティをの値に設定します。 xalign

「クリックされた」シグナルは、ユーザーがtreeviewcolumnヘッダーボタンをクリックしたときに発行されます。

TreeViewColumnオブジェクトを構成した後、append_column()メソッドを使用してTreeViewウィジェットに追加されます。

以下は、TreeViewクラスの重要なメソッドです。

  • TreevVew.set_model()-これは、ツリービューの「モデル」プロパティを設定します。ツリービューにすでにモデルが設定されている場合、このメソッドは新しいモデルを設定する前にそれを削除します。場合model です None、古いモデルの設定を解除します。

  • TreeView.set_header_clickable()-Trueに設定すると、列のタイトルボタンをクリックできます。

  • TreeView.append_column()-これにより、指定されたものが追加されます TreeViewColumn 列のリストに。

  • TreeView.remove_column()-これにより、指定された列がツリービューから削除されます。

  • TreeView.insert_column()-これは指定されたものを挿入します column で指定された場所のツリービューに position

TreeViewウィジェットは次のシグナルを発します-

カーソルが変更されました これは、カーソルが移動または設定されたときに発生します。
展開-折りたたみ-カーソル-行 これは、カーソルの行を展開または折りたたむ必要がある場合に発行されます。
行アクティブ化 これは、ユーザーが treeview
行が折りたたまれています これは、ユーザーまたはプログラムによるアクションによって行が折りたたまれたときに発行されます。
行拡張 これは、ユーザーまたはプログラムによるアクションによって行が展開されたときに発行されます。

TreeViewウィジェットの2つの例を以下に示します。最初の例では、ListStoreを使用して単純なListViewを作成します。

ここで、ListStoreオブジェクトが作成され、文字列アイテムが追加されます。このListStoreオブジェクトは、TreeViewオブジェクトのモデルとして使用されます-

store = gtk.ListStore(str)

treeView = gtk.TreeView()
treeView.set_model(store)

次に、CellRendererTextがTreeViewColumnオブジェクトに追加され、同じものがTreeViewに追加されます。

rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Name", rendererText, text = 0)
treeView.append_column(column)

TreeViewオブジェクトは、Fixedコンテナーに追加することにより、トップレベルウィンドウに配置されます。

例1

次のコードを確認してください-

import pygtk
pygtk.require('2.0')
import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("TreeView with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      store = gtk.ListStore(str)
      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      
      treeView = gtk.TreeView()
      treeView.set_model(store)
		
      rendererText = gtk.CellRendererText()
      column = gtk.TreeViewColumn("Python GUI Libraries", rendererText, text=0)
      treeView.append_column(column)
      
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(treeView, 125,15)
		
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,175)
      self.label = gtk.Label("")
		
      fixed.put(self.label, 125,175)
      self.add(fixed)
      
      treeView.connect("row-activated", self.on_activated)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_activated(self, widget, row, col):
      
	  model = widget.get_model()
      text = model[row][0]
      self.label.set_text(text)
		
def main():
   gtk.main()
   return

if __name__ == "__main__":
   bcb = PyApp()
   main()

ユーザーが選択したアイテムは、ウィンドウのラベルに次のように表示されます。 on_activated callback 関数が呼び出されます。

例2

2番目の例では、TreeStoreから階層TreeViewを構築します。このプログラムは、ストアを構築し、TreeViewのモデルとして設定し、TreeViewColumnを設計し、TreeViewに追加するのと同じシーケンスに従います。

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("TreeView with TreeStore")
      self.set_size_request(400,200)
      self.set_position(gtk.WIN_POS_CENTER)
      vbox = gtk.VBox(False, 5)
      
      # create a TreeStore with one string column to use as the model
      store = gtk.TreeStore(str)
      
      # add row
      row1 = store.append(None, ['JAVA'])
      
      #add child rows
      store.append(row1,['AWT'])
      store.append(row1,['Swing'])
      store.append(row1,['JSF'])
      
      # add another row
      row2 = store.append(None, ['Python'])
      store.append(row2,['PyQt'])
      store.append(row2,['WxPython'])
      store.append(row2,['PyGTK'])
      
      # create the TreeView using treestore
      treeview = gtk.TreeView(store)
      tvcolumn = gtk.TreeViewColumn('GUI Toolkits')
      treeview.append_column(tvcolumn)
		
      cell = gtk.CellRendererText()
      tvcolumn.pack_start(cell, True)
      tvcolumn.add_attribute(cell, 'text', 0)
      vbox.add(treeview)
		
      self.add(vbox)
      
	  self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

次のTreeViewが出力として表示されます-