Учебники

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 — модель для многоколонного виджета Tree. Например, следующий оператор создает хранилище с одним столбцом, имеющим строковый элемент.

Store = gtk.TreeStore(gobject.TYPE_STRING)

Чтобы добавить элементы в TreeStore, используйте метод append (). Метод append () имеет два параметра, родительский и строковый. Чтобы добавить элемент верхнего уровня, родительский 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,…)

В дополнение к заголовку и средству визуализации требуется ноль или более пар атрибут = столбец, чтобы указать, из какого столбца модели дерева следует извлечь значение атрибута. Эти параметры также могут быть установлены с использованием методов класса TreeViewColumn, приведенных ниже.

Gtk.CellRenderer — это базовый класс для набора объектов для визуализации различных типов данных. Производными классами являются CellRendererText, CellRendererPixBuf и CellRendererToggle.

Следующие методы класса TreeViewColumn используются для настройки его объекта:

  • TreeViewColumn.pack_start (cell, expand = True) — этот метод упаковывает объект CellRenderer в начальный столбец. Если для параметра расширения установлено значение «Истина», ячейке выделяется все выделенное пространство столбцов.

  • TreeViewColumn.add_attribute (ячейка, атрибут, столбец) — этот метод добавляет отображение атрибута в список в столбце дерева. Столбец является столбцом модели дерева.

  • TreeViewColumn.set_attributes () — этот метод устанавливает расположение атрибутов средства визуализации, используя пары attribute = column

  • TreeViewColumn.set_visible () — если True, столбец дерева виден

  • TreeViewColumn.set_title () — этот метод устанавливает для свойства «title» указанное значение.

  • TreeViewColumn.set_lickable () — если установлено значение True, заголовок может иметь фокус клавиатуры и быть нажатым.

  • TreeViewColumn.set_alignment (xalign) — этот метод устанавливает для свойства «alignment» значение xalign .

TreeViewColumn.pack_start (cell, expand = True) — этот метод упаковывает объект CellRenderer в начальный столбец. Если для параметра расширения установлено значение «Истина», ячейке выделяется все выделенное пространство столбцов.

TreeViewColumn.add_attribute (ячейка, атрибут, столбец) — этот метод добавляет отображение атрибута в список в столбце дерева. Столбец является столбцом модели дерева.

TreeViewColumn.set_attributes () — этот метод устанавливает расположение атрибутов средства визуализации, используя пары attribute = column

TreeViewColumn.set_visible () — если True, столбец дерева виден

TreeViewColumn.set_title () — этот метод устанавливает для свойства «title» указанное значение.

TreeViewColumn.set_lickable () — если установлено значение True, заголовок может иметь фокус клавиатуры и быть нажатым.

TreeViewColumn.set_alignment (xalign) — этот метод устанавливает для свойства «alignment» значение xalign .

Сигнал «нажал» испускается, когда пользователь нажимает кнопку заголовка древовидного столбца .

После настройки объекта TreeViewColumn он добавляется в виджет TreeView с помощью метода append_column ().

Ниже приведены важные методы класса TreeView:

  • TreevVew.set_model () — устанавливает свойство «модель» для дерева. Если древовидная структура уже имеет набор моделей, этот метод удалит его перед настройкой новой модели. Если модель None , это приведет к сбросу старой модели.

  • TreeView.set_header_clickable () — при значении True можно нажимать кнопки заголовка столбца.

  • TreeView.append_column () — это добавляет указанный TreeViewColumn к списку столбцов.

  • TreeView.remove_column () — удаляет указанный столбец из дерева.

  • TreeView.insert_column () — вставляет указанный столбец в древовидную структуру в месте, указанном позицией .

TreevVew.set_model () — устанавливает свойство «модель» для дерева. Если древовидная структура уже имеет набор моделей, этот метод удалит его перед настройкой новой модели. Если модель None , это приведет к сбросу старой модели.

TreeView.set_header_clickable () — при значении True можно нажимать кнопки заголовка столбца.

TreeView.append_column () — это добавляет указанный TreeViewColumn к списку столбцов.

TreeView.remove_column () — удаляет указанный столбец из дерева.

TreeView.insert_column () — вставляет указанный столбец в древовидную структуру в месте, указанном позицией .

Виджет 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 Object помещается в окно верхнего уровня, добавляя его в фиксированный контейнер.

Пример 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_activation .

TreeView с ListStore

Пример 2

Второй пример строит иерархическое TreeView из TreeStore. Эта программа следует той же последовательности построения хранилища, установки его в качестве модели для 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 отображается в качестве вывода —