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는 다중 열 트리 위젯의 모델입니다. 예를 들어, 다음 문은 문자열 항목이있는 하나의 열이있는 상점을 만듭니다.

Store = gtk.TreeStore(gobject.TYPE_STRING)

TreeStore에 항목을 추가하려면 append () 메서드를 사용하십시오. append () 메서드에는 parent와 row라는 두 개의 매개 변수가 있습니다. 최상위 항목을 추가하려면 parent가 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 개 이상의 attribute = column 쌍이 필요합니다. 이러한 매개 변수는 아래에 주어진 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, treeview 열이 표시됩니다.

  • TreeViewColumn.set_title ()-이 메소드는 "title"속성을 지정된 값으로 설정합니다.

  • TreeViewColumn.set_lickable () − True로 설정하면 헤더가 키보드 포커스를 가져와 클릭 할 수 있습니다.

  • TreeViewColumn.set_alignment (xalign)-이 메서드는 "alignment"속성을 다음 값으로 설정합니다. xalign.

"clicked"신호는 사용자가 treeviewcolumn 헤더 버튼을 클릭 할 때 발생 합니다.

TreeViewColumn 개체를 구성한 후 append_column () 메서드를 사용하여 TreeView 위젯에 추가됩니다.

다음은 TreeView 클래스의 중요한 방법입니다-

  • TreevVew.set_model ()-이것은 treeview에 대한 "model"속성을 설정합니다. 트 리뷰에 이미 모델 세트가있는 경우이 메소드는 새 모델을 설정하기 전에이를 제거합니다. 만약model 이다 None, 이전 모델을 설정 해제합니다.

  • TreeView.set_header_clickable () − True로 설정하면 칼럼 제목 버튼을 클릭 할 수 있습니다.

  • TreeView.append_column ()-이것은 지정된 TreeViewColumn 열 목록에.

  • TreeView.remove_column ()-이것은 트 리뷰에서 지정된 열을 제거합니다.

  • TreeView.insert_column ()-이것은 지정된 column 지정된 위치의 트리 뷰로 position.

TreeView 위젯은 다음 신호를 방출합니다.

커서 변경 이것은 커서가 움직이거나 설정 될 때 방출됩니다.
확장-축소-커서-행 커서의 행을 확장하거나 축소해야 할 때 발생합니다.
행 활성화 사용자가 두 번 클릭하면 발생합니다. treeview
행 접힘 사용자 또는 프로그래밍 작업에 의해 행이 축소 될 때 발생합니다.
행 확장 이는 사용자 또는 프로그래밍 방식 작업을 통해 행이 확장 될 때 내 보냅니다.

TreeView 위젯의 두 가지 예가 아래에 나와 있습니다. 첫 번째 예제는 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 개체는 고정 컨테이너에 추가하여 최상위 창에 배치됩니다.

예 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

두 번째 예제는 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는 출력으로 표시됩니다-