PyGTK TreeView类

PyGTK TreeView类

TreeView小部件显示实现gtk.TreeModel接口的模型的内容。PyGTK提供以下类型的模型−

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

ListStore是一个列表模型。当与gtk.TreeView小部件关联时,它会生成一个包含要从中选择的项目的List box。一个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以显示store数据。gtk.TreeViewColumn对象使用gtk.CelRenderer来管理标题和单元格。使用以下构造函数创建TreeViewColumn对象−

gtk.TreeViewColumn(title, cell_renderer,…)

除了标题和渲染器之外,还可以使用零个或多个 attribute=column 对来指定要检索属性值的树模型列。 这些参数也可以使用下面给出的 TreeViewColumn 类的方法来设置。

gtk.CellRenderer 是用于渲染不同类型数据的一组对象的基类。 派生类有 CellRendererText、CellRendererPixBuf 和 CellRendererToggle。

TreeViewColumn 类的以下方法用于配置其对象:

  • TreeViewColumn.pack_start(cell, expand = True) – 此方法将 CellRenderer 对象打包到开始列。 如果将 expand 参数设置为 True,则整个分配的空间将分配给 cell。

  • TreeViewColumn.add_attribute(cell, attribute, column) – 此方法向树列的列表中添加属性映射。column 是树模型的列。

  • TreeViewColumn.set_attributes() – 此方法使用 attribute = column 对,设置 renderer 的属性位置。

  • TreeViewColumn.set_visible() – 如果为True,则树视图列可见。

  • TreeViewColumn.set_title() – 此方法将 “title” 属性设置为指定的值。

  • TreeViewColumn.set_lickable() – 如果设置为True,则标题可以获得键盘焦点并点击。

  • TreeViewColumn.set_alignment(xalign) – 此方法将 “alignment” 属性设置为 xalign 的值。

“clicked” 信号在用户点击 treeviewcolumn 头部按钮时发出。

配置完 TreeViewColumn 对象后,可以使用 append_column() 方法将其添加到 TreeView 小组件中。

TreeView 类的以下是重要的方法:

  • TreevVew.set_model() – 为树视图设置 “model” 属性。 如果树视图已经设置了模型,则此方法将在设置新模型之前将其删除。 如果 model 为 None,则将取消设置旧模型。

  • TreeView.set_header_clickable() – 如果设置为True,则列标题按钮可以被点击。

  • TreeView.append_column() – 将指定的 TreeViewColumn 追加到列列表中。

  • TreeView.remove_column() – 从树视图中移除指定的列。

  • TreeView.insert_column() – 将指定的列插入到树视图中,位置由 position 指定。

TreeView小部件发出以下信号−

cursor-changed 当光标移动或设置时发出。
expand-collapse-cursor-row 当光标所在行需要展开或折叠时发出。
row-activated 当用户双击 treeview 行时发出。
row-collapsed 当行被用户或程序折叠时发出。
row-expanded 当行通过用户或程序展开时发出。

下面给出了两个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对象通过将其添加到一个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回调函数时

PyGTK TreeView类

示例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作为输出结果 −

PyGTK TreeView类

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程